0

我有一个将通过 cron 运行的 php 脚本

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

运行.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

有没有办法做到这一点?

谢谢

4

3 回答 3

1

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

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

于 2012-04-28T10:19:29.373 回答
1

将最后一行更改为:

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

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

于 2012-04-28T11:08:03.880 回答
0

最后是成功的代码

exec("nohup python server.py start &> /dev/null &");
于 2012-06-03T19:53:00.193 回答