1

シェルスクリプトを使用して、phpスクリプトの動作を監視しています。私の目的は、このphpスクリプトがスリープ/終了してはならず、常に実行されている必要があることです。使用したコードは-

ps aux | grep -v grep | grep -q $file || ( nohup php -f $file -print > /var/log/file.log & ) 

現在、このアイデアは、phpスクリプトが終了した場合(プロセスステータスコードT)には機能しません。その場合を処理するための任意のアイデア。そのようなプロセスを完全に強制終了してから再起動することはできますか。

4

2 に答える 2

2

phpインタープリターが死んだら再起動するのはどうですか?

while true ; do php -f $file -print >> /var/log/file.log ; done

もちろん、誰かがスクリプトに、、、を送信しSIGSTOPSIGTSTPハングSIGTTINSIGTTOUせることもできますが、おそらくその人には本当に正当な理由があります。を除いてすべてブロックできるSIGSTOPので、大丈夫かもしれません。

または、スクリプトがデバイスやソケットでの呼び出しread(2)のように、決して戻らないようなことをした場合、これはスクリプトの「活性」を実際に保証するものではありません。(ただし、この状況を防ぐために非ブロッキングIOを使用するので、それで十分です。)

はい、/ etc/inittabに詰め込むこともできます。しかし、これはおそらく悪い考えだと思うので、私はあなたにこれについてのヒント以上のものを与えていません。

そして、すでに存在する多くの同様のツールがあります。daemontoolsLinuxHeartbeatが最初に頭に浮かぶ2つです。

于 2011-01-24T09:19:04.210 に答える
1

スクリプトがターミネーターの後に終了している場合、またはスクリプトがクラッシュして再起動する必要がある場合は、単純なシェルスクリプトでそれを処理できます。

#!/bin/bash
# runScript.sh - keep a php script running
php -q -f ./cli-script.php -- $@
exec $0 $@;

指定されたexec $0パラメータを使用して、シェルスクリプトを再実行します。

バックグラウンドで実行するには、nohup runScript.shinit.dスクリプト、upstart、runit、supervisordなどを使用して実行できます。

于 2011-08-06T11:12:31.220 に答える