nohupを使用してスクリプトを無期限に実行するように設定する

nohupを使用してスクリプトを無期限に実行するように設定する

私はそれに慣れておらず、私のWebサーバーLinuxにのみ使用します。私が経験した問題はこんな感じです。SSHPutty

デフォルトではスクリプトが2つありますphp。 1人はget_tweets.phpTwitterのツイートを継続的に聴き、Streaming APIもう1人はparse_tweets.phpそのツイートを記録しますdb。便利に使用するには、継続的に実行する必要があります。

私は次のコマンドを使用してバックグラウンドで実行してきましたが、私が見ることができる限り、一日中実行されますが、朝にコンピュータにログインするたびに停止し、scriptsコマンドを再実行する必要があります。

nohup php my_script.php > /dev/null &

nohup私が使用しているコマンドに応じて、これが正常なのか、それを使用するときに無期限に実行する必要があるのか​​、それ以外の場合は代替策は何ですか?職業CRON

ご協力ありがとうございます

答え1

また、nohupエラーをリダイレクトする必要があります。次のコマンドはスクリプトを実行し、出力とエラーを/ dev / nullにリダイレクトします。

nohup php my_script.php >/dev/null 2>&1 &

ただし、他の理由により(スクリプトエラー、oom-killerなど)スクリプトが終了する可能性があります。したがって、システムのinitを介してそれをデーモン化する必要があります(自動再起動をサポートしている場合は、upstart、systemd、および他のいくつかの機能がこれを実行できます)。または、スクリプトが実行されていない場合は、クローンジョブを作成してスクリプトを確認して再起動する必要があります。

答え2

たぶん出力を/dev/null

オープンscreentmuxセッションを提案します。両方ターミナルマルチプレクサ、ログアウトしてもアクティブのままです。

たとえば、(..)情報を入手してください。

$ screen
$(inside screen-t1): ./get_tweets.php
.... running first

新しい端末を開くにはCtrl-a c、キーを押します。

 $(inside screen-t2): ./parse_tweets.php
 ... running second

Ctrl-a dセッションを分離できます。再度ログインするときは、次を使用してください。screen -r

注:画面にステータスバーを表示して、さまざまなウィンドウを視覚化できます。

答え3

スクリプトが終了したときに再起動されることを確認するには、次のようにします。while true ; do php my_script.php ; done > /dev/null

my_script.phpが再実行される前に実行が完了するのを待ちます。すべての出力は/ dev / nullに送信されます。

nohupを使用するには、次の手順を実行する必要があります。

$ echo 'while true ; do php my_script.php ; done > /dev/null' > ~/php_run_loop.sh
$ chmod a+x ~/php_run_loop.sh
$ nohup ~/php_run_loop.sh

注:PHPスクリプトにバグやその他の問題がある場合は、制限なく実行できます。エレガントな解決策ではありませんが、解決策です。

しかし、cronはスケジュールに応じて(5分ごと、毎週など)短期プロセスを実行するのに適していますが、既存のプロセスを実行し続ける方法がわかりません。

関連情報