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

我写了一个bash脚本,定期检查一个新添加的.ear文件的目录,并将它们复制到相应的JBoss服务器的deploy目录中。在复制之前,它会检查JBoss是否正在运行,如果是,则停止它。复制文件后,它删除旧的.ear文件(如果有的话),并启动JBoss。
我正在尝试通过网页执行此脚本。 即提供一个链接到用户,点击哪个,整个过程得到执行。到目前为止,我无法得到所需的结果,尽pipe手动执行它的工作。
我在http日志中收到以下错误:

警告] [client 127.0.0.1]超时等待CGI脚本输出/var/www/cgi-bin/auto.sh,referer:http:// localhost /

如果有人能够阐明如何去做,我将不胜感激。

  1. CGI脚本将以networking服务器的用户ID运行,这可能不是testing者的用户ID。 你考虑过了吗?

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

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

如果它太笨重,试图从shell执行CGI,则将其封装在一些perl或python中,这些库有处理CGI的库。

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

另外,根据networking服务器的设置,CGI在超时之前只能运行很长时间。

非常感谢,drpaulbrewer和其他人。这当然是一个权限问题。有设法得到它在sudoers file给予必要的权限给apache的工作。还得到一个'[错误] [客户端127.0.0.1]标准必须在日志中是一个tty,referer: http:// localhost / '错误,通过在sudoers文件的'Defaults requiretty'部分排除apache,我摆脱了这个错误。

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

再次感谢。 Nagaraj