次のように実行されるLinuxサーバー上のphpスクリプトがあります。
nohup php myscript.php > /dev/null &
このスクリプトは、1 時間ごとに再起動する必要があります。どうすれば自動的にそれを行うことができますか?
注: スクリプトには、無期限に実行される機能があります。そのため、起動時に開いたままにする必要があります。したがって、スクリプトを再実行する前に、スクリプトを強制終了する必要があります。
次のように実行されるLinuxサーバー上のphpスクリプトがあります。
nohup php myscript.php > /dev/null &
このスクリプトは、1 時間ごとに再起動する必要があります。どうすれば自動的にそれを行うことができますか?
注: スクリプトには、無期限に実行される機能があります。そのため、起動時に開いたままにする必要があります。したがって、スクリプトを再実行する前に、スクリプトを強制終了する必要があります。
無限ループを実行し、プロセスが終了するのを待つシェル スクリプトによってスクリプトを開始します。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");
cronjob を追加するには、次を使用します。
crontab -e
それから
0 * * * * timeout 3600 nohup php myscript.php > /dev/null &
timeout
'3600'
この例では、param は 2 秒後にプロセスを強制終了します
アップデート
また、使用できます
set_time_limit(3600);
3600
数秒後にそれを殺すあなたのphpファイルの冒頭に