如何从 Web 服务器调用本地 shell 脚本?
Posted
技术标签:
【中文标题】如何从 Web 服务器调用本地 shell 脚本?【英文标题】:How do I call a local shell script from a web server? 【发布时间】:2012-01-12 18:36:31 【问题描述】:我正在运行 Ubuntu 11,我想设置一个简单的网络服务器,通过使用 GET 或 POST 参数调用本地脚本来响应 http 请求。这个脚本(已经写好了)做了一些事情并创建了一个文件。这个文件应该在一个 URL 上可用,然后网络服务器应该向另一个服务器发出一个 http 请求,告诉它下载创建的文件。
我将如何进行设置?我不是 linux 的初学者,但我也不会说我很了解它。
我应该使用什么网络服务器?如何授予脚本访问本地资源以创建相关文件的权限?我不太关心安全或任何事情,这是为了个人实验(我可以控制所有涉及的计算机)。我以前用过apache,但我从来没有设置过。
任何帮助将不胜感激..
【问题讨论】:
【参考方案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_cg
i a2enmod cgi
在我的系统上,我使用以下命令来激活 mod_cgi:sudo a2enmod cgi
sudo service apache2 restart
@TonoNam 我建议提出另一个问题并链接到这个问题。我不知道答案。
@Daniel 我建议将其作为一个单独的问题提出
@AlexanderMills 可能是您没有在与 apache 交谈,或者是配置不同。这是 7 多年前的事了,所以我不确定 cgi-bin 是否已经默认启用了以上是关于如何从 Web 服务器调用本地 shell 脚本?的主要内容,如果未能解决你的问题,请参考以下文章
使用 shell 脚本从文件中测试其余 web 服务时如何获取成功计数、失败计数和失败原因
为啥这个带有 shell_exec 调用的 PHP 脚本从 Windows 10 的命令行运行,而不是浏览器/本地主机?