如何通过浏览器链接执行 bash shell 脚本

如何通过浏览器链接执行 bash shell 脚本

我编写了一个 bash 脚本,它会定期检查目录中是否有新添加的 .ear 文件,并将它们复制到相应的 JBoss 服务器的部署目录中。在复制之前,它会检查 JBoss 是否正在运行,如果正在运行,则停止它。复制文件后,它会删除旧的 .ear 文件(如果有),然后启动 JBoss。
我试图通过网页执行此脚本。即向用户提供一个链接,单击该链接,整个过程就会执行。到目前为止,我还没有得到想要的结果,尽管手动执行它是可行的。
我在 http 日志中收到以下错误:

警告] [客户端 127.0.0.1] 等待 CGI 脚本 /var/www/cgi-bin/auto.sh 输出超时,引用者:http://本地主机/

如果有人能解释一下如何解决这个问题,我将不胜感激。

答案1

  1. CGI 脚本将使用 Web 服务器的用户 ID 运行,而这可能不是测试人员的用户 ID。您考虑过这一点吗?

  2. CGI 脚本需要打印一个标题和一些输出,如“成功,感谢使用 auto.sh”。

 echo "Content-type: text/plain"
 echo 
 echo "Success, thanks for using auto.sh"

如果从 shell 尝试执行 CGI 太笨重,请将其包装在有处理 CGI 的库的 perl 或 python 中。

另一种方法是将令牌留在文件或数据库列中,告诉它运行,然后让它从 cron 激活或让它不断运行并寻找令牌。

此外,根据 Web 服务器的设置方式,您的 CGI 只能运行一段时间,之后就会超时...

答案2

非常感谢,~drpaulbrewer 和其他人。这肯定是一个权限问题。已设法通过在 sudoers 文件中向 apache 提供必要的权限来使其正常工作。还收到了“[错误] [客户端 127.0.0.1] 标准必须是 tty,引用者:http://本地主机/' 日志中的错误,我通过从 sudoers 文件中的“Defaults requiretty”部分排除 apache 来摆脱该错误。

虽然我最初考虑将脚本作为 cronjob 来运行,但是它并没有实现,因为我们是在测试环境中运行它,并且同时运行多个 JBoss 实例。我们认为最好让用户手动触发脚本,因此采用了这种方法。

再次感谢。 纳格拉杰

相关内容