我在Linux服务器上有一个php脚本,运行方式如下:
nohup-php-myscript.php>/dev/null&
此脚本需要每小时重新启动一次。我怎么能自动做到这一点?
注意:脚本有一个不稳定运行的函数。因此,当它启动时,它必须保持打开状态。因此,在脚本再次重新运行之前,必须将其杀死。
要添加cronjob,请使用:
crontab -e
然后
0 * * * * timeout 3600 nohup php myscript.php > /dev/null &
在本例中,timeout
参数将在'3600'
秒后终止进程
更新
你也可以使用
set_time_limit(3600);
在你的php文件的开头,它将在3600
秒后杀死它
通过一个shell脚本启动脚本,该脚本运行一个无休止的循环并等待进程完成。由于PHP脚本中还有一个无休止的循环,只有当脚本停止时才会出现这种情况。
接下来,将脚本的PID写入一个文本文件。您应该通过以下方式获取PID:http://php.net/manual/en/function.getmypid.php
下一步是设置一个每小时运行一次的cronjob。这个cronjob读取PID.txt文件,删除它并终止进程。
由于开头提到的shell脚本也有一个无尽的lopp,它将直接重新启动php进程。
示例脚本:
入门脚本:
#!/bin/bash
while true
do
php myscript.php > /dev/null
done
将其保存为start.sh,并设置chmod+x以能够执行它。
现在,您可以从以下内容开始:nohub/start.sh&
在.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");