私はLinux
を非常に使い始めており、SSH
を使用してWebサーバーにPuTTY
するためだけに使用しています。私が抱えている問題はこれです:
基本的に私は2つのphp
スクリプトを持っています。一方のget_tweets.php
は、ツイッターのツイートStreaming API
を常にリッスンし、もう一方のparse_tweets.php
は、これらをdb
にログインします。これらが機能するためには、継続的に実行し続ける必要があります。
私は次のコマンドを使用して、バックグラウンドで実行し、それらを1日のほとんどの期間実行していることを確認しましたが、朝にコンピューターにログオンするたびに、scripts
が停止し、コマンドをもう一度実行する必要があります。
Nohup php my_script.php > /dev/null &
私が使用しているコマンドに基づいてそれが正常であるかどうか疑問に思っています。Nohup
を使用すると、それらは無期限に実行されますか? CRON
ジョブ?
助けてくれてありがとう
Nohup
では、エラーもリダイレクトする必要があります。次のコマンドは、/ dev/nullにリダイレクトする出力とエラーを含むスクリプトを実行します。
Nohup php my_script.php >/dev/null 2>&1 &
ただし、スクリプトは他の理由(スクリプトのエラー、oom-killerなど)で終了する可能性があります。したがって、システムのinitでデーモン化する必要があります(自動再起動をサポートしている場合-upstart、systemd、および他のユーザーがそれを実行できます)。または、スクリプトが実行されない場合は、チェック用のcronタスクを記述してスクリプトを再起動する必要があります。
おそらく、何が起こっているのかを確認し、出力を/dev/null
にリダイレクトしないでください。
screen
またはtmux
セッションを開くことをお勧めします。どちらもターミナルマルチプレクサであり、ログアウトしても存続します。
例えば。 (..)
詳細
$ 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
を使用します
注:ステータスバーを画面に表示して、さまざまなウィンドウを視覚化できます。
スクリプトが終了したときにスクリプトが確実に再起動するようにしたい場合は、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分ごと、または毎週など)を実行するのに適しています。既存のプロセスを実行し続ける方法がわかりません。