什麼會導致.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