Supervisorはマルチプロセスタスクを監視する-Superlance


Supervisorはマルチプロセスタスクを監視する
背景
サーバにはSupervisor管理のタスクが配置されており、各タスクは起動後にそれぞれ複数のプロセスを起動し、各プロセスは異なるスクリプトプログラムを実行します.スクリプト・プログラムが多すぎるため、Supervisorでは1つ1つの構成が非常に面倒になるため、このような1つのタスクが複数のスクリプトに対応するスキームが採用されています.
多分そういう意味だscript.ppid = task.pid --> task.ppid = supervisor.pid.私の文字レベルではこれしか説明できないので、尽力しました.
開始
開始
開始
開始
開始
開始
開始
開始
開始
Supervisor
Task 1
Task 2
Task n
Script 1
Script n
Script 1
Script n
Script 1
Script n
Supervisorは簡単で使いやすいツールで、configファイルにautorestart=trueを配置すれば、あなたのプロセスが停止したときに自動的に再起動します.taskプロセスが停止しても、scriptプロセスが停止しても、Supervisorはまじめに再起動してくれます.そこで、問題が来ました.scriptはtaskで構成コードを実行した後に起動したスクリプトです.Supervisorが自動的に再起動したとき、taskがどのスクリプト構成を実行したのか、どのように起動したscriptを知っていますか.そう、それは知らないし、知ることもできない.しかし、Supervisorさんは本当に仕事を尊敬しています.毛が知らなくても再起動します.configファイルに対応するcommandを実行し、taskプロセスの下に掛けてtaskのサブプロセスとして、以前と同じですが、この新しいサブプロセスが何を実行しているのかは分かりませんが、私は長い間何を起動したのか分かりません.
Supervisorの自動再起動を期待するのは無理ですが、先祖伝来のフレームワークも変更できないので、監視カメラを追加しましょう.Supervisorはプロセスが切れたことを知っているのではないでしょうか.それでは、切った後に私に知らせてください.あなたは私の人工的な再起動を再起動しません.そこで、Superlanceを導入し、プロセスが停止したときにメールで知らせてほしいと思いました.
プレミアムプラグイン-Superlance
SuperlanceはSupervisorに基づいて実現されたプラグインの一部で、高級プラグインと呼ばれているのは、「プラグイン--Superlance」が聞きにくいので、本当に高級だからではなく、2つの字を加えて読むのが上手だからです.githubから見ると、Superlanceが前回更新されたのは2018年2月で、今では9012年になりましたが、おそらくこれ以上更新されません.
Superlanceにはいくつかの主な機能があります.
  • http:通常、httpリクエストを5 sおきに送信してurlが有効であることを検証し、リクエストに失敗した場合にメールアラームを送信するなど、TICKイベントをバインドします.
  • crashmail:本明細書で使用する機能は、プロセスが意外に終了した場合、メールアラームを送信する.
  • memmon:メモリモニタリング;
  • crashsms:crashmailと似ていますが、メールで通報します.

  • Superlanceの取り付けは異常に簡単で、pip install superlanceで終わりました.Supervisorと一緒に入ればいいのを確認してください.しかしSuperlanceはメールを無駄に送る機能はないので、メール機能を使うにはsendmailをサーバにインストールする必要があります.
    sendmailインストール構成
    私はcentosの下で使っているので、yum install sendmail、同時にyum install mailxです.インストールが終わったらSuperlanceでメールを送ることができます.
    パイナップルスイカの棒ハンマーについて話した後、文章を書いてブログを書く人もいました.数学の本の「明らかに、分かりやすい」のと同じように憎いです.このように書くのは極めて無責任ですから、批判させていただきます.
    まず、インストール後sendmailは外部にメールを送ることができません.sendmailのプロファイルを開きます.私のところは/etc/mail/sendmail.mcで、その中のDAEMON_OPTIONSを修正して、127.0.0.1を0.0.0.0に変更して、それからm4 sendmail.mc > sendmail.cfで、sendmailサービスを再起動して、その時に外部にメールを送ってみます.
    smtpが設定されていない場合、サーバから送信されたメールに使用されるメールボックスは「user@host」という形式で、サーバーから直接送信されますが、このようなメールは一部のメールボックスで迷惑メールと見なされ、直接拒否されます.QQメールボックスをテストしても拒否されないので、QQメールボックスで先にテストすることができます.echo test | mail -s test [email protected]正常に受け取れば、次のステップに進むことができます.失敗したらメールサービスのログを開いてみることをお勧めします.私のメールログは/var/log/maillogです.
    次にsmtpを構成し、/etc/mail.rcに次の内容を追加します.
    set from=[email protected]
    set smtp=smtp.xx.com
    set smtp-auth-user=[email protected]
    set smtp-auth-password=yourpassword
    set smtp-auth=login
    

    sendmailサービスを再起動します.再起動してメールを送信しようとすると、送信者がsmtpを構成したメールボックスになり、スパムとして拒否されることもありません.あまり頻繁にメールを送信しないように注意してください.そうしないと、一部のメールボックスはあなたの送信者のメールボックスを閉鎖します.私にどのように知っているか聞かないでください.T.T
    最後に、まだ穴があります.mailです.rcではsmtpが設定されており、mailコマンドを実行すると自動的に設定されたメールが送信されますが!でも!superlanceでmailコマンドを直接呼び出すか、デフォルトサーバーのメールボックスで送るか、commandでは正直にsmtp構成を書かなければなりません.
    Superlanceプラグインの有効化
    Superlanceを使用するのは簡単です.既存のsupervisorプロファイルにイベントリスニングを追加すればいいです.
    [eventlistener:crashmail]
    command=/usr/local/python2.7/bin/crashmail -a -m [email protected]
    events=PROCESS_STATE_EXITED
    redirect_stderr=true
    stdout_logfile=/data/logs/listener.log
    stderr_logfile=/data/logs/listener_error.log
    

    commandの具体的な書き方はやはり公式文書に行ってよく見ることをお勧めします.
    完了後にSupervisorを再起動し、プロセスの起動が完了するのを待って、手動でプロセスkillを探して、アラームメールを受け取ることができるかどうかを見て、受け取るとOKになります.
    に穴をあける
    メールを受け取ったらOKと言っていましたが、私はずっと受け取れませんでした.天坑に足を踏み入れたからです.
    失敗を繰り返した後、公式文書でこのような言葉を見ました.
    Crashmail is incapable of monitoring the process status of processes which are not supervisord child processes.
    冒頭で述べたように、scriptはtaskのサブプロセスであり、taskこそSupervisorのサブプロセスである.つまり、Supervisorが正常に再起動できないだけでなく、Superlanceも監視できず、警察に通報できないということです.
    Supervisorはscriptプロセスが停止していることを検出し、再起動しようとしますが、なぜSuperlanceは検出できないのでしょうか.この疑問を抱いて簡単にソースコードを見てみると、Supervisorのサブプロセスがマルチプロセスタスクである場合、Supervisorはサブプロセスのサブプロセスがオフになっていることを発見した後、再び引き上げられるが、このイベントを出力することはなく、Superlanceの実現原理はこの出力に基づいているため、scriptプロセスがオフになった場合、Superlanceはアラームを実現できない.そのためSuperlanceのドキュメントには各モジュールの下にほとんど書かれており、Supervisorの直接サブプロセスを監視するしかありません.私は文書をよく読まないで、この穴に落ちて、ピューピューとしています.
    Superlanceモニタリングscriptプロセスを監視するには、supervisorのイベント出力モジュールを書き換える必要があります.書き換え作業量が大きすぎてメンテナンスが困難なため、監視プログラムを自分で作成してこの機能を実現し、次回の分解を聞くことにした.