什么可以导致 .sh 脚本通过 SSH shell 正常工作,但在通过 PHP 或 crontab 执行时不能正常工作?
我有一个运行游戏服务器的 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
确实可以,打印一些类似于“Would start ~mta/servers/test/files/mta-server -d”的内容。但是这样做:
sudo -u mta ~mta/sh/startserver.sh $2
绝对什么都不做。它不打印任何东西,它实际上返回0。(这应该意味着操作成功)
现在是有趣的部分:当服务器已经在运行时,startserver.sh 将做它应该做的事情:假设服务器已经在运行,并返回一个错误代码。(因为 start-stop-daemon 对我来说很友好)但它完全拒绝启动任何东西。
将 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、Shell、Bash 或其他任何东西在通过 PHP 或 crontab 运行时拒绝启动应用程序,而在通过 SSH 启动时愉快地接受它?我需要切换任何设置吗?任何可以阻止我想做的事情的包?还有什么我只是想念的吗?