通过cron运行php脚本挂起终端

时间:2012-04-28 10:01:33

标签: 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 &");
?>

最后一行导致问题。

当我直接从终端运行php脚本时

/var/www/scripts/run.php

它启动服务器但终端挂起

当脚本通过cron运行时

虽然剧本已完成,但我在ps中看到了以下内容

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

有办法吗?

由于

3 个答案:

答案 0 :(得分:1)

如果您的PHP脚本确实是一个shell脚本,请更改shebang。如果你想让python调用在后台运行,请附加“&amp;”在行尾。如果您将其设为shell脚本,请尝试使用sh -x <script>执行它以查看哪个命令挂起。

如果你想让它成为一个有效的PHP脚本,那将会有很多工作,但是如果你使用的是POSIX,你可以使用fork()来使它相对简单。

答案 1 :(得分:1)

将您的最后一行更改为:

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

当控制进程或用户离开时,nohup会告诉进程不要停止。这可能是也可能不是你的问题,但值得一试。

答案 2 :(得分:0)

最后执行技巧的代码

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