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


How to restart PHP script every 1 hour?

我在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");