2012-04-28 79 views
0

我有一個PHP腳本,將通過cron通過cron運行PHP腳本掛終端

*/5 * * * * /var/www/scripts/run.php 

run.php

#!/usr/bin/php 
<?php 
#stop server 
exec("python /home/server.py stop"); 

#execute some php code here 

#start server again 
exec("python server.py start 2>&1 &"); 
?> 

最後一行導致問題運行。

當我直接從終端

/var/www/scripts/run.php 

運行PHP腳本它啓動服務器,但是當腳本通過cron運行的終端掛起

我在PS中的下方看到儘管劇本完成

root  23510 0.5 1.3 280064 14228 ?  Ss 10:32 0:00 /usr/bin/php /var/www/scripts/run.php 

有沒有辦法做它?

感謝

+1

從內PHP一樣,可你不能調用Python代碼?你不應該通過執行或系統執行python嗎? – davidethell 2012-04-28 10:13:25

+0

並記住指定完整路徑 – k102 2012-04-28 10:18:20

+0

看起來你並不真的需要PHP這裏,但一個bash腳本會做。另外,你不應該把它保存在'www'中。將其移至網絡不可見的目錄。 – Nadh 2012-04-28 10:24:46

回答

1

如果你的PHP腳本確實是一個shell腳本,改變家當。如果您希望python調用在後臺運行,請在行尾添加「&」。如果您將其設置爲shell腳本,請嘗試使用sh -x <script>執行它以查看哪個命令掛起。

如果你想使它成爲一個有效的PHP腳本,這將是很多工作,但如果你使用POSIX,你可以使用fork(),這會使它變得相對簡單。

+0

嗨。不,我不需要一個UNIX shell腳本,而是一個有效的php腳本。另外,我使用Linux。你能用fork來提供一些例子嗎?謝謝 – Thomas 2012-04-28 10:56:43

+0

這裏的fork示例:http://php.net/manual/en/function.pcntl-fork.php – 2012-05-01 18:09:58

1

你的最後一行改成這樣:

exec("nohup python server.py start 2>&1 &"); 

nohup這個會告訴進程不停止時控制過程或用戶已經一去不復返了。這可能是也可能不是你的問題,但值得一試。

+0

謝謝。試過了,但結果是一樣的。 – Thomas 2012-04-28 11:13:49

+0

如果將輸出重定向到文件會怎麼樣?嘗試更改結尾「>> some_output_file&」 – davidethell 2012-04-28 11:53:25

+0

仍然沒有。這讓我瘋狂 – Thomas 2012-04-28 13:14:23

0

最後,做的伎倆

exec("nohup python server.py start &> /dev/null &");