如何每1小时重启一次PHP脚本?

时间:2013-09-03 09:37:23

标签: php

我在Linux服务器上有一个php脚本,运行方式如下:

nohup php myscript.php> / dev / null&

此脚本需要每小时重新启动一次。我该如何自动完成?

注意:脚本具有无限运行的功能。因此,当它开始时,它必须保持打开状态。因此,在脚本重新运行之前,它必须被杀死。

3 个答案:

答案 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)

使用cron作业你可以做到这一点

这些是例子

link1link2link3