Supervisor:プロセスの持続的な運用を実現
3165 ワード
この間、ポケットは600 wのMySQLテーブルを処理する必要があり、データ処理で使用される言語はPythonです.
コードは192.54サーバに配備され、SSHでリモートサーバにログインした後、手動でこのタスクを実行します.関連するデータ量が大きいため、時間がかかり、python testを直接実行する.pyの場合、途中でTerminalをオフにしたり、ネットワークが不安定になったりしてプロセスが中断する可能性があります.
サービスができるだけ早く円満に実行されることを保証するために、常にプロセスの状態に注目し、故障が発生した場合、直ちに手動で再起動する必要がある.明らかに、これは多くの精力を浪費し、正常な仕事のリズムを中断します.
コマンドの送信後、ローカルでターミナルウィンドウを閉じる/ネットワークの接続を切断するなどの要因に干渉されないようにするにはどうすればいいですか?次に、ソリューションを探します. nohup supervisor
nohup
Nohup、すなわちno hangup、nohupの用途は、コミットされたコマンドにhangup信号を無視させ、私たちのプロセスが途中で中断されることを避けることです.
使用方法も簡単で、コマンドの前に
Nohupが簡単で使いやすいことを考慮して、最初は
supervisor
components
supervisord
supervisorのサービス側は
supervisordでは、ユーザーがプロファイル:
supervisorctl
supervisorのクライアントは
supervisorctlとsupervisordのインタラクションはTCPプロトコルによって行われる.
Web Server
同時にsupervisorはwebインタフェースを提供してsupervisordにアクセスします
XML-RPC Interface
supervisorはXML-RPCインタフェースも提供してsupervisordにアクセスします
手順の使用 supervisorをインストールする:pip install supervisor デフォルトプロファイル を生成する.修正/etc/supervisord.conf supervisord を起動 supervosirctl を起動以降shellでsupervisord管理のプロセスを操作できる その他の一般的なコマンドは、次のとおりです. supervisorctl status supervisorctl start appname supervisorctl restart appname supervisorctl stop appname supervisorctl stop all supervisorctl reload
/etc/supervisordを変更した場合.conf、supervisorctl reloadを実行してプロファイルを再ロードする必要があります.そうしないと有効になりません.
公式サイトのほかに、Monitoring Processes with Supervisordというブログもあります
supervisorの使い勝手は非常に簡単で、現在はsupervisorの監視サブプロセス&自動再起動機能しか使用していませんが、今回のデータ処理プロセスの安定した運行を保証するのに十分です.
コードは192.54サーバに配備され、SSHでリモートサーバにログインした後、手動でこのタスクを実行します.関連するデータ量が大きいため、時間がかかり、python testを直接実行する.pyの場合、途中でTerminalをオフにしたり、ネットワークが不安定になったりしてプロセスが中断する可能性があります.
サービスができるだけ早く円満に実行されることを保証するために、常にプロセスの状態に注目し、故障が発生した場合、直ちに手動で再起動する必要がある.明らかに、これは多くの精力を浪費し、正常な仕事のリズムを中断します.
コマンドの送信後、ローカルでターミナルウィンドウを閉じる/ネットワークの接続を切断するなどの要因に干渉されないようにするにはどうすればいいですか?次に、ソリューションを探します.
nohup
Nohup、すなわちno hangup、nohupの用途は、コミットされたコマンドにhangup信号を無視させ、私たちのプロセスが途中で中断されることを避けることです.
使用方法も簡単で、コマンドの前に
nohup
を付けるだけで、標準出力と標準エラーのデフォルトはnohupにリダイレクトされます.outファイルにあります.一般的には、最後に&を付けてコマンドをバックグラウンドに入れて実行するか、デフォルトのリダイレクトファイル名を変更するには「>filename 2>&1」を使用します.nohup python update_t_drug_readnum.py &
Nohupが簡単で使いやすいことを考慮して、最初は
nohup &
を使って実行しようとしましたが、依然としてわけがわからず中断して、怒ってingして、仕方なく新しい方法を探し続けて、それからlinuxの中の1つの神器を見つけました:supervisorsupervisor
Supervisor is a client/server system that allows its users to monitor and control a number of processes on UNIX-like operating systems. -- from http://supervisord.org/
人の話では、supervisorはPythonで開発されたclient/server(dockerを勉強している間にDocker Engine is a client-server application
に遭遇したことがあるかどうか)のプロセス管理プログラムで、ユーザーにクラスLinuxオペレーティングシステムでプロセスのセットを監視させることができます.components
supervisord
supervisorのサービス側は
supervisord
と呼ばれています.サブプロセスの起動(通常のコマンドラインプロセスをバックグラウンドdaemonに変更)、クライアントコマンドへの応答、プロセスステータスの監視、crashedが削除したサブプロセスの自動再起動、サブプロセスのstdout、stderrの記録を担当します.supervisordでは、ユーザーがプロファイル:
/etc/supervisord.conf
でビジネスニーズを満たすカスタムパラメータを構成する必要があります.supervisorctl
supervisorのクライアントは
supervisorctl
であり、shell-likeインタフェースを提供してsupervisordを呼び出す.supervisorctlにより、ユーザーは複数のsupervisordプロセスに接続し、supervisordのサブプロセス状態、stop or startサブプロセス、supervisordのrunning状態のサブプロセスを取得できます.supervisorctlとsupervisordのインタラクションはTCPプロトコルによって行われる.
Web Server
同時にsupervisorはwebインタフェースを提供してsupervisordにアクセスします
XML-RPC Interface
supervisorはXML-RPCインタフェースも提供してsupervisordにアクセスします
手順の使用
echo_supervisord_conf > /etc/supervisord.conf
[program:drug]0
command=python update_t_drug_readnum.py
autostart=true
supervisord -c /etc/supervisord.conf
supervisord // , /etc/supervisord.conf
supervisorctl
/etc/supervisordを変更した場合.conf、supervisorctl reloadを実行してプロファイルを再ロードする必要があります.そうしないと有効になりません.
公式サイトのほかに、Monitoring Processes with Supervisordというブログもあります
supervisorの使い勝手は非常に簡単で、現在はsupervisorの監視サブプロセス&自動再起動機能しか使用していませんが、今回のデータ処理プロセスの安定した運行を保証するのに十分です.