シェルスクリプトを無限に実行し、PHPスクリプト(my.phpなど)の状態をチェックし続け、スクリプトが何らかの理由で終了した場合は再起動します。私は行く考えを持っています -他のスクリプトの状態を確認して再起動するシェルスクリプト
ps -aux | grep "my.php"
この結果を使って状態を確認し、それに応じて行います。前もって感謝します。
シェルスクリプトを無限に実行し、PHPスクリプト(my.phpなど)の状態をチェックし続け、スクリプトが何らかの理由で終了した場合は再起動します。私は行く考えを持っています -他のスクリプトの状態を確認して再起動するシェルスクリプト
ps -aux | grep "my.php"
この結果を使って状態を確認し、それに応じて行います。前もって感謝します。
あなたは、単に言うことができます:それは動作します
ps -aux | grep -q "my.php" || php -f my.php
方法はgrep -q
はないでしょう何も出力が、それは何かを発見した場合は、「OK」終了コードを返すことです。 "NOT OK"の終了コードを返すと、||
( "or")の後の部分が実行されます(ブールの短絡評価のため、参照してください)。
あなたはまた、ことを確認する必要があります。
あなたがバックグラウンドで新しいスクリプトを実行し、時にはps | grep
を実行したときにスクリプトが
を監視し続けることができるように、あなたのコンソールからそれを切り離しますpsはまたあなたのgrepをリストし、grepは "greps自身"をフィルタリングする必要があります。
それは次のようになります。
while true
ps -aux | grep -v grep | grep -q "my.php" || (nohup php -f "my.php" &)
sleep 1
done
または一部-などを..
別のアプローチで、ループ内であなたのphp-プログラムを開始します。
for ((;;))
do
my.php
done
Linux psの場合、
ps -C "my.php"
my.phpを識別するために、grepの代わりに。 Grepコマンドはしばしば自分自身を見つけます。多分あなたのPSにも同様のスイッチがありますか?
私はどのオペレーティングシステムを使用しているのかわかりませんが、私の場合、-Cは "常駐"時間 "*"を無視した "未処理の" CPU計算を使用してCPUパーセンテージを計算する方法を変更します。 OPの質問がPHPとシェルに関するものであれば、PHPとシェルの観点から質問に答えてください。他のコマンドの特有の風味ではありません。 – ghoti
私はLinuxを使用していますが、psのマンページによれば、このpsは以下を受け入れています: 1)単一Unix仕様のバージョン2、2)Open Group技術標準仕様、Issue 6,3)IEEE Std 1003.1,2004 Edition、4)X/Open System Interfaces Extension [UP XSI]、5)ISO/IEC 9945:2003' - 十分だと思いました。 –
私たちが知っているのは、OPのオペレーティングシステムは、SystemVのオプションではなく、 'ps'のバークレースタイルのオプションを使用しているということだけです。 – ghoti
実際にgrepの出力をps
とgrepする必要があると感じる場合は、grepの検索自体に注意してください。
[[email protected] ~]$ sleep 60 &
[1] 66677
[[email protected] ~]$ ps aux | grep sleep
ghoti 66677 0.0 0.0 3928 784 11 S 4:11PM 0:00.00 sleep 60
ghoti 66681 0.0 0.0 16440 1348 11 S+ 4:12PM 0:00.00 grep sleep
[[email protected] ~]$
これを避ける簡単な方法があります。あなたのgrepの一部をより複雑な正規表現にするだけです。それは死ぬときあなたは自分のPHPスクリプトが常に実行されることを確認する場合は、あなたが何かでそれをラップすることができます一方
[[email protected] ~]$ sleep 60 &
[2] 66717
[[email protected] ~]$ ps aux | grep '[s]leep'
ghoti 66677 0.0 0.0 3928 784 11 S 4:11PM 0:00.00 sleep 60
ghoti 66717 0.0 0.0 3928 784 11 S 4:13PM 0:00.00 sleep 60
[[email protected] ~]$
、それを再実行します:
while true; do
php /path/to/my.php
done
あなたの場合これは起動時に実行するために、サーバー上であなたのcrontabを編集することができ、あなたが「いるVixie」のcron(LinuxやBSDに共通)を使用していると仮定すると、@rebootタグを使いたい:
@reboot /path/to/wrapperscript
あなたがすることができますcronと@reboot
タグの使用方法の詳細は、とman 5 crontab
です。
システムに 'pgrep'がある場合は、使い方が簡単です。 –