我有一个将通过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
有办法吗?
由于
答案 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 &");