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

以上是关于如何从 Web 服务器调用本地 shell 脚本?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Web 脚本调用本地外围设备

如何利用jenkins git shell脚本自动部署服务

远程调用shell脚本文件和远程复制文件

使用 shell 脚本从文件中测试其余 web 服务时如何获取成功计数、失败计数和失败原因

为啥这个带有 shell_exec 调用的 PHP 脚本从 Windows 10 的命令行运行,而不是浏览器/本地主机?

命令行 php mysqli 失败但通过 Web 服务器工作并在本地工作