【问题标题】:How do I call a local shell script from a web server?如何从 Web 服务器调用本地 shell 脚本?
【发布时间】:2026-01-21 01:25:01
【问题描述】:

我正在运行 Ubuntu 11,我想设置一个简单的网络服务器,通过使用 GET 或 POST 参数调用本地脚本来响应 http 请求。这个脚本(已经写好了)做了一些事情并创建了一个文件。这个文件应该在一个 URL 上可用,然后网络服务器应该向另一个服务器发出一个 http 请求,告诉它下载创建的文件。

我将如何进行设置?我不是 linux 的初学者,但我也不会说我很了解它。

我应该使用什么网络服务器?如何授予脚本访问本地资源以创建相关文件的权限?我不太关心安全或任何事情,这是为了个人实验(我可以控制所有涉及的计算机)。我以前用过apache,但我从来没有设置过。

任何帮助将不胜感激..

【问题讨论】:

    标签: apache shell ubuntu nginx webserver


    【解决方案1】:

    This tutorial looks good,不过有点简短。

    我已经安装了 apache。如果你不这样做:sudo apt-get install apache2

    cd /usr/lib/cgi-bin
    
    # Make a file and let everyone execute it
    sudo touch test.sh && chmod a+x test.sh 
    

    然后将一些代码放入文件中。例如:

    #!/bin/bash
    # get today's date
    OUTPUT="$(date)"
    # You must add following two lines before
    # outputting data to the web browser from shell
    # script
     echo "Content-type: text/html"
     echo ""
     echo "<html><head><title>Demo</title></head><body>"
     echo "Today is $OUTPUT <br>"
     echo "Current directory is $(pwd) <br>"
     echo "Shell Script name is $0"
     echo "</body></html>"
    

    最后打开浏览器并输入http://localhost/cgi-bin/test.sh

    如果一切顺利(对我来说),你应该会看到...

    今天是 12 月 4 日星期日 ...
    当前目录是 /usr/lib/cgi-bin Shell
    Shell 脚本名称为 /usr/lib/cgi-bin/test.sh

    【讨论】:

    • 如果尚未启用,我们还必须启用mod_cgi a2enmod cgi
    • 在我的系统上,我使用以下命令来激活 mod_cgi:sudo a2enmod cgisudo service apache2 restart
    • @TonoNam 我建议提出另一个问题并链接到这个问题。我不知道答案。
    • @Daniel 我建议将其作为一个单独的问题提出
    • @AlexanderMills 可能是您没有在与 apache 交谈,或者是配置不同。这是 7 多年前的事了,所以我不确定 cgi-bin 是否已经默认启用了