我在Linux服务器上有一个php脚本,运行方式如下:
nohup php myscript.php> / dev / null&
此脚本需要每小时重新启动一次。我该如何自动完成?
注意:脚本具有无限运行的功能。因此,当它开始时,它必须保持打开状态。因此,在脚本重新运行之前,它必须被杀死。
答案 0 :(得分:2)
通过运行无限循环的shell脚本启动脚本,并等待进程完成。 由于您的PHP脚本中也有无限循环,因此只有在脚本停止时才会出现这种情况。
接下来,将脚本的PID写入文本文件。 你应该得到这个PID: http://php.net/manual/en/function.getmypid.php
下一步是设置每小时运行一次的cronjob。 此cronjob读取PID .txt文件,删除它并终止进程。
由于开头提到的shell脚本也有无穷无尽的lopp,它会直接重启php进程。
示例脚本:
Starter Script:
#!/bin/bash
while true
do
php myscript.php > /dev/null
done
保存它,例如作为start.sh并设置chmod + x以便能够执行它。
现在您可以使用以下命令启动它: nohub ./start.sh& amp;
在.php中,你在开头做了类似的事情:
file_put_contents("/tmp/yourscript.pid", getmypid());
并且将cron脚本称为bash:
#!/bin/bash
PID=`cat /tmp/yourscript.pid`
rm /tmp/yourscript.pid
kill -9 $PID
你也可以使用php:
加载cron脚本<?php
$pid=file_get_contents("/tmp/yourscript.pid");
unlink("/tmp/yourscript.pid");
shell_exec("kill -9 $pid");
答案 1 :(得分:1)
添加cronjob:
crontab -e
然后
0 * * * * timeout 3600 nohup php myscript.php > /dev/null &
timeout
param将在此示例中'3600'
秒后终止该进程
更新
你也可以使用
set_time_limit(3600);
在你的php文件的开头会在3600
秒后杀死它
答案 2 :(得分:0)