Supervisor:プロセスの持続的な運用を実現

3165 ワード

この間、ポケットは600 wのMySQLテーブルを処理する必要があり、データ処理で使用される言語はPythonです.
コードは192.54サーバに配備され、SSHでリモートサーバにログインした後、手動でこのタスクを実行します.関連するデータ量が大きいため、時間がかかり、python testを直接実行する.pyの場合、途中でTerminalをオフにしたり、ネットワークが不安定になったりしてプロセスが中断する可能性があります.
サービスができるだけ早く円満に実行されることを保証するために、常にプロセスの状態に注目し、故障が発生した場合、直ちに手動で再起動する必要がある.明らかに、これは多くの精力を浪費し、正常な仕事のリズムを中断します.
コマンドの送信後、ローカルでターミナルウィンドウを閉じる/ネットワークの接続を切断するなどの要因に干渉されないようにするにはどうすればいいですか?次に、ソリューションを探します.
  • nohup
  • supervisor

  • nohup
    Nohup、すなわちno hangup、nohupの用途は、コミットされたコマンドにhangup信号を無視させ、私たちのプロセスが途中で中断されることを避けることです.
    使用方法も簡単で、コマンドの前にnohupを付けるだけで、標準出力と標準エラーのデフォルトはnohupにリダイレクトされます.outファイルにあります.一般的には、最後に&を付けてコマンドをバックグラウンドに入れて実行するか、デフォルトのリダイレクトファイル名を変更するには「>filename 2>&1」を使用します.
    nohup python update_t_drug_readnum.py &
    

    Nohupが簡単で使いやすいことを考慮して、最初はnohup &を使って実行しようとしましたが、依然としてわけがわからず中断して、怒ってingして、仕方なく新しい方法を探し続けて、それからlinuxの中の1つの神器を見つけました:supervisor
    supervisor 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にアクセスします
    手順の使用
  • supervisorをインストールする:pip install supervisor
  • デフォルトプロファイル
  • を生成する.
    echo_supervisord_conf > /etc/supervisord.conf
    
  • 修正/etc/supervisord.conf
  • [program:drug]0
    command=python update_t_drug_readnum.py
    autostart=true
    
  • supervisord
  • を起動
    supervisord -c /etc/supervisord.conf
    supervisord //          ,   /etc/supervisord.conf     
    
  • supervosirctl
  • を起動
    supervisorctl
    
  • 以降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の監視サブプロセス&自動再起動機能しか使用していませんが、今回のデータ処理プロセスの安定した運行を保証するのに十分です.