我在 Linux 服务器上有一个 php 脚本,运行如下:
nohup php myscript.php > /dev/null &
该脚本需要每小时重新启动一次。我怎样才能自动做到这一点?
注意:脚本具有无限运行的功能。因此,当它启动时,它必须保持打开状态。所以在脚本再次重新运行之前,它必须被杀死。
我在 Linux 服务器上有一个 php 脚本,运行如下:
nohup php myscript.php > /dev/null &
该脚本需要每小时重新启动一次。我怎样才能自动做到这一点?
注意:脚本具有无限运行的功能。因此,当它启动时,它必须保持打开状态。所以在脚本再次重新运行之前,它必须被杀死。
要添加 cronjob,请使用:
crontab -e
然后
0 * * * * timeout 3600 nohup php myscript.php > /dev/null &
timeout
'3600'
在本例中,param 将在第二个之后终止进程
更新
你也可以使用
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");