2012-08-03 70 views
2

什么会导致.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启动时高兴地接受它?有什么设置需要切换吗?任何可以阻止我想要做的包?任何其他的事情,我只是想念?

+0

你指定的脚本或二进制可执行文件? – 2012-08-03 23:54:45

+0

是的。我正在触发其他用户的个人文件夹中的shell脚本,以便完成各种操作,并且在使用SSH触发它们时,它们都可以运行。但是,使用PHP时,启动命令将不会触发。 – Gamesnert 2012-08-04 12:09:54

回答

0

看看使用sudo。

为Apache运行的用户(通常用于'nobody'用户或'apache'用户)设置/ etc/sudoer(使用visudo),因为这是Apache通常运行的用户。使用NOPASSWD选项授予您要运行的命令的sudo访问权限。

在你的PHP脚本,使用EXEC()来执行命令来启动/停止守护进程和前缀sudo命令的命令。

这里是关于sudo的文章:

http://www.cyberciti.biz/tips/allow-a-normal-user-to-run-commands-as-root.html

+0

我想我应该早点清理这件事,所以我道歉:PHP文件(WEB1)的用户已经以供其他用户(MTA)执行命令sudo的使用。 (即 “命令-u MTA SH /home/mta/sh/startserver.sh $ 1”)这工作得很好,因为所有命令的工作。除了startserver.sh,它似乎是Web服务器或其他我无法想象的东西的限制。我会编辑我的问题,以便更清楚地了解这一点。 – Gamesnert 2012-08-04 12:08:23

0

因为我觉得贾斯汀触及,但没有具体说,它似乎不能够运行的脚本是问题apache用户帐户(通常用途非常有限)由于权限而无法看到用户的主目录。通常只有用户和root可以看到他们自己的主目录。你可以做一些事情,sudo来运行在主目录中的脚本,将它移出用户的主目录的或可能改变脚本/家庭的权限,使他们能够在用户的主目录被Apache运行。

+0

这可能不是这样的,因为我现在已经尝试在这两个问题本身更详细一点,并响应Justin的答案解释。如果是这种情况,我想知道,不会停止服务器等也给出问题?因为目前情况并非如此; “start-stop-daemon -v -start”只是拒绝完全启动可执行文件,而没有任何关于为什么的指示,而0作为返回码 - 通常表示成功。虽然我可能只是错了。无论哪种方式,我对这种情况都有点不清楚,但是谢谢你试图澄清这一点。 – Gamesnert 2012-08-04 12:23:12

相关问题