什么会导致.sh脚本通过SSH shell正常工作,但不是在通过PHP或crontab执行时会发生什么?Shell脚本仅在通过ssh使用时启动应用程序
我有一个用于运行游戏服务器的VPS,但为了使其可维护,我正在计划自动执行许多繁琐的过程(如设置或删除服务器)以及制作重要功能(如启动和停止服务器)很容易为那些真正需要它的人所接受。
现在,当我编写shell脚本并测试它们时,它们工作得非常好。 startserver启动了服务器,restartserver重启了它等等。但是当从PHP运行时,或者 - 正如我后来想到的--crontab,启动服务器神奇地不起作用。停止它们,检查它们是否正在运行,更新以及所有其他功能如预期的那样工作,但启动服务器只是没有做任何事情。它什么都不打印时只返回0。
例如,下面是一个脚本,在任何情况下工作的一个例子:(statusserver.sh)
/sbin/start-stop-daemon -v -t --start --exec ~mta/servers/$1/files/mta-server -- -d
这里是一个不以任何情况下工作:(startserver.sh)
/sbin/start-stop-daemon -v --start --exec ~mta/servers/$1/files/mta-server -- -d
唯一的区别是,statusserver.sh有“-t”,它只会告诉你,如果没有-t做同样的命令实际上是成功的。和执行statusserver.sh像这样:
sudo -u mta ~mta/sh/statusserver.sh test
确实没有工作,打印的东西沿着“将开始〜MTA /服务器/测试/文件/ MTA服务器-d”行。但是这样做:
sudo -u mta ~mta/sh/startserver.sh $2
绝对没有。它不打印任何东西,它实际上返回0.(这应该表示操作成功)
现在有趣的部分:当服务器已经运行时,startserver.sh将执行它应该做的事情做:说服务器已经运行,并返回一个错误代码。 (因为start-stop-daemon对我来说足够了)但它拒绝启动任何东西。
更换启动 - 停止守护的东西,如:
sudo -u mta ~mta/servers/test/files/mta-server -d
是否完全一样的东西:它只是将拒绝运行,而仍然被方式返回0。
哦,这不是一个sudo问题。那我敢肯定,因为下面的工作也没关系
sudo -u web1 sudo -u mta ~mta/scripts/startserver.sh test
所以,回到我的问题:什么会导致Linux上,壳牌,猛砸或者通过运行一切以平掉拒绝启动应用程序无论是PHP还是crontab,而通过SSH启动时高兴地接受它?有什么设置需要切换吗?任何可以阻止我想要做的包?任何其他的事情,我只是想念?
你指定的脚本或二进制可执行文件? – 2012-08-03 23:54:45
是的。我正在触发其他用户的个人文件夹中的shell脚本,以便完成各种操作,并且在使用SSH触发它们时,它们都可以运行。但是,使用PHP时,启动命令将不会触发。 – Gamesnert 2012-08-04 12:09:54