0

次のように実行されるLinuxサーバー上のphpスクリプトがあります。

nohup php myscript.php > /dev/null &

このスクリプトは、1 時間ごとに再起動する必要があります。どうすれば自動的にそれを行うことができますか?

注: スクリプトには、無期限に実行される機能があります。そのため、起動時に開いたままにする必要があります。したがって、スクリプトを再実行する前に、スクリプトを強制終了する必要があります。

4

2 に答える 2

2

無限ループを実行し、プロセスが終了するのを待つシェル スクリプトによってスクリプトを開始します。PHP スクリプトにも無限ループがあるため、これはスクリプトが停止している場合にのみ発生します。

次に、スクリプトの PID をテキスト ファイルに書き込みます。これで PID を取得する必要があります: http://php.net/manual/en/function.getmypid.php

次のステップは、1 時間ごとに実行される cronjob をセットアップすることです。この cronjob は PID .txt ファイルを読み取り、それを削除してプロセスを強制終了します。

冒頭で述べたシェル スクリプトにも無限ループがあるため、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 に答える
2

cronjob を追加するには、次を使用します。

    crontab -e

それから

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

timeout'3600'この例では、param は 2 秒後にプロセスを強制終了します

アップデート

また、使用できます

  set_time_limit(3600);

3600数秒後にそれを殺すあなたのphpファイルの冒頭に

于 2013-09-03T09:58:54.910 に答える