0

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

nohup php myscript.php > /dev/null &

该脚本需要每小时重新启动一次。我怎样才能自动做到这一点?

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

4

2 回答 2

2

要添加 cronjob,请使用:

    crontab -e

然后

   0 * * * *   timeout 3600  nohup php myscript.php > /dev/null &

timeout'3600'在本例中,param 将在第二个之后终止进程

更新

你也可以使用

  set_time_limit(3600);

在您的 php 文件的开头,它将在3600几秒钟后杀死它

于 2013-09-03T09:58:54.910 回答
2

通过运行无限循环并等待进程完成的 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");
于 2013-09-03T09:49:45.050 回答