Linux運用保守ツールSupervisor(プロセス管理ツール)のインストールと使用

Linux運用保守ツールSupervisor(プロセス管理ツール)のインストールと使用

1. はじめに

Supervisor は Python で開発された汎用プロセス管理プログラムです。通常のコマンドライン プロセスをバックグラウンド デーモンに変換し、プロセスの状態を監視し、異常終了したときに自動的に再起動することができます。現在、Supervisor はほとんどの Unix システムで実行できますが、Windows システムでの実行はサポートされていません。 Supervisor には Python 2.4 以降が必要ですが、Python 3 バージョンはサポートされていません。

2. 組み込みのWeb管理プログラム

スーパーバイザーには 4 つのコンポーネントがあります。

1. 監督者
Supervisor バックグラウンド サービスを実行します。このサービスは、Supervisor で管理する必要があるサブプロセスの開始と管理、クライアントからの要求への応答、予期せず終了したサブプロセスの再起動、サブプロセスの stdout と stderr のログへの書き込み、イベントへの応答などに使用されます。これはSupervisorの中核部分です。

2. スーパーバイザー
これは supervisord のクライアントと同等であり、サブプロセスのステータスの確認やサブプロセスの開始またはシャットダウンなどの指示をユーザーが supervisord サービスに送信できるコマンドライン ツールです。リモート マシン上のサービスを含むさまざまな監視サービスに接続できます。

3. Web サーバー これは supervisord の Web クライアントです。ユーザーは Web ページ上で supervisorctl と同様の機能を実行できます。

4. XML-RPC インターフェース これは、サードパーティ統合用に予約されたインターフェースです。サービスはこれらの XML-RPC インターフェースをリモートで呼び出して、supervisord によって管理されるサブプロセスを制御できます。上記の Web サーバーは、実際にはこの XML-RPC インターフェイスを通じて実装されています。

3. インストール

以下の3つの方法からお選びいただけます

1. インストール

echo "supervisor-3.3.4 のインストール (はいの場合は 1 を入力してください。いいえの場合はその他を入力してください):" 
SVを読む
[ "$SV" = "1" ]の場合; 
	cd $ベースパス
	$basepath/supervisor-3.3.4.zip を解凍します。 
	cd スーパーバイザー-3.3.4
	python setup.py インストール
	echo "supervisor-3.3.4 のインストールが完了しました"
それ以外
	echo "supervisor-3.3.4 をインストールしないことを選択しました"
フィ

2. ソースコードのインストール

 https://pypi.python.org/packages/7b/17/88adf8cb25f80e2bc0d18e094fcd7ab300632ea00b601cbbbb84c2419eae/supervisor-3.3.4.tar.gz を実行します。
 tar -zxvf スーパーバイザー-3.3.4.tar.gz
 cd スーパーバイザー-3.3.4
 python setup.py install #ローカルの python バージョンは python2.7 です

3. Yumのインストール

yum インストール スーパーバイザー

4. 設定ファイル

インストール後に /etc/supervisord.conf 構成ファイルが存在しない場合は、次のコマンドで生成します。

echo_supervisord_conf > /etc/supervisord.conf

5. スタートアップ

スーパーバイザード -c /etc/supervisord/supervisord.conf 
	echo "supervisor-3.3.4 が正常に起動しました"

6. スタートアップを設定する

systemctl は supervisord.service を有効にします

7. supervisordが実行中かどうかを確認する

ps aux | grep supervisord

8. supervisorctl 管理コマンド

supervisorctl status #ステータス supervisorctl stop nginx #nginx をシャットダウン
 supervisorctl start nginx #nginxを起動する
 supervisorctl restart nginx #nginxを再起動します
 supervisorctl reload #すべてを再起動 supervisorctl update #設定を更新

このコマンドは、個別に使用することも、組み合わせて使用​​することもできます。

9. 設定ファイルの説明

[unix_http_サーバー]
file=/tmp/supervisor.sock ;UNIX ソケット ファイル、supervisorctl が使用します。chmod=0700 ;ソケット ファイル モード、デフォルトは 0700 です。
;chown=nobody:nogroup ;ソケットファイルの所有者、形式: uid:gid

;[inet_http_server] ;Web 管理インターフェースを提供する HTTP サーバー;port=127.0.0.1:9001 ;Web 管理バックエンドの IP とポート。パブリック ネットワークに公開されている場合は、セキュリティに注意する必要があります;username=user ;管理バックエンドにログインするためのユーザー名;password=123 ;管理バックエンドにログインするためのパスワード [supervisord]
logfile=/tmp/supervisord.log; ログファイル、デフォルトは $CWD/supervisord.log
logfile_maxbytes=50MB; ログ ファイルのサイズ。これを超えるとローテーションされます。デフォルトは 50MB です。0 に設定すると、サイズ制限がないことを意味します。logfile_backups=10; ログ ファイルのバックアップのデフォルト数は 10 です。0 に設定すると、バックアップがないことを意味します。loglevel=info; ログ レベル。デフォルトは info、その他: debug、warn、trace
pidfile=/tmp/supervisord.pid ;pid ファイル nodaemon=false ;フォアグラウンドで起動するかどうか。デフォルトは false、つまりデーモン モードで起動します。 minfds=1024 ;開くことができるファイル記述子の最小値。デフォルトは 1024 です。
minprocs=200; 開くことができるプロセスの最小数。デフォルトは200です。

[スーパーバイザーctl]
serverurl=unix:///tmp/supervisor.sock ; UNIX ソケット経由で supervisord に接続します。パスは unix_http_server 部分のファイルと一致します。 serverurl=http://127.0.0.1:9001 ; HTTP 経由で supervisord に接続します

; [program:xx] は管理対象プロセスの構成パラメータ、xx はプロセスの名前です [program:xx]
command=/opt/apache-tomcat-8.0.35/bin/catalina.sh run ; プログラムの起動コマンド autostart=true ; supervisord の起動時に自動的に起動 startsecs=10 ; 起動後 10 秒経過しても異常終了がない場合は、プロセスが正常に起動したことを意味します。デフォルトは 1 秒です autorestart=true ; プログラム終了後、自動的に再起動します。オプションの値: [unexpected、true、false]。デフォルトは、unexpected です。つまり、プロセスは、誤って強制終了された場合にのみ再起動します startretries=3 ; 起動が失敗した場合の自動再試行回数。デフォルトは 3 です
user=tomcat; プロセスを開始するために使用されるユーザー。デフォルトはrootです。
priority=999; プロセス起動の優先度、デフォルトは999、値が小さいプロセスが最初に起動されます redirect_stderr=true; stderrをstdoutにリダイレクトします、デフォルトはfalseです
stdout_logfile_maxbytes=20MB; stdout ログ ファイルのサイズ、デフォルトは 50MB
stdout_logfile_backups = 20 ; stdout ログファイルのバックアップ数。デフォルトは 10 です。
; stdout ログ ファイル。指定されたディレクトリが存在しない場合は正常に起動できないため、手動でディレクトリを作成する必要があります (supervisord はログ ファイルを自動的に作成します)。
stdout_logfile=/opt/apache-tomcat-8.0.35/logs/catalina.out
stopasgroup=false; デフォルトは false で、プロセスが強制終了されたときに、子プロセスを含むプロセス グループに停止信号を送信するかどうかを指定します。killasgroup=false; デフォルトは false で、子プロセスを含むプロセス グループに強制終了信号を送信します。その他の設定ファイルが含まれます [include]
files =/etc/supervisord.d/*.ini ; .iniで終わる1つ以上の設定ファイルを指定できます。

10. ini設定ファイルの例

[プログラム:MysqlToRedis]
ディレクトリ = /data/py/SmartServerModel/SmartServerModel/ModelManagerServer/
コマンド = python3 -u mysql2redis_robot_config.py cs
自動起動 = true
自動再起動=true
開始秒数 = 5
ユーザー =root
リダイレクトstderr = true
stdout_logfile = /data/logs/supervisord/mysqltoredis.log

[プログラム:SmartBinLog]
コマンド = /data/go/src/SmartBinLog/SmartBinLog
自動起動 = true
自動再起動=true
開始秒数 = 5
ユーザー =root
リダイレクトstderr = true
stdout_logfile = /data/logs/supervisord/smartbinlog.log

[グループ:nlp]
programs=MysqlToRedis、SmartBinLog ;server、progname2 はそれぞれ [program:x] 定義の 'x' を参照します
priority=999 ; 相対的な開始優先度(デフォルト 999)

11.ウェブページ管理プログラムを開く

conf設定ファイル内のコメント行をすべてコメント解除し、ポート、ユーザー名、パスワードを変更します。

[inet_http_server] ;Web 管理インターフェイスを提供する HTTP サーバーport=127.0.0.1:9001 ;Web 管理バックエンドの IP とポート。パブリック ネットワークに公開されている場合は、セキュリティに注意してくださいusername=user ;管理バックエンドにログインするためのユーザー名password=123 ;管理バックエンドにログインするためのパスワード

12. 「unix:///tmp/supervisor.sock そのようなファイルはありません」という問題を解決する

時々、次のような問題に遭遇します:


解決策は簡単です:

①. 既存のsupervisorctlプロセスを停止する


②. 設定ファイル「/etc/supervisord.conf」を修正し、tmpをetcに変更します。 /tmpディレクトリ内のファイルはオペレーティングシステムによって定期的にリサイクルされるため、変更する必要があります。

③. 変更した設定ファイルを使用して supervisord を起動すると、すべてが正常に戻ります。

以下もご興味があるかもしれません:
  • Linux プロセス管理ツール スーパーバイザーのインストールと設定のチュートリアル
  • Linux でのプロセスデーモン スーパーバイザーのインストール、構成、および使用
  • Supervisor のインストールと構成の詳細な説明 (Linux/Unix プロセス管理ツール)
  • PHPプログラマーはスーパーバイザーを使用してデーモンプロセスを実装するLinuxシリーズをプレイします
  • スーパーバイザーウォッチドッグの使い方を3分で学ぶ

<<:  Vueメソッドに基づくシンプルなタイマーの実装

>>:  MySQLデュアルマシンホットスタンバイと負荷分散の実装手順の詳細説明

推薦する

DockerでNginxサーバーを作成する方法

動作環境: MAC Docker バージョン: Docker version 17.12.0-ce,...

CSS コンテナ背景 10 色グラデーション デモ (linear-gradient())

文法 背景: linear-gradient(direction,color-stop1,color...

MySql 8.0.11 のインストール プロセスと Navicat とのリンク時に発生する問題の概要

私のシステムとソフトウェアのバージョンは次のとおりです。システム環境: win7、64ビットMySQ...

VueプロジェクトでReactを書く方法の詳細

jsx/tsxファイルを直接作成できます今回のプロジェクト構成は以下のとおりです。 vueファイルで...

mysql57サービスが突然消えた問題をすぐに解決する

1つ、 G:\MySQL\MySQL Server 5.7\bin> mysqld --ini...

CentOS 上での MySQL 5.6 のコンパイルとインストール、および複数の MySQL インスタンスのインストールの詳細な説明

--1. mysql用の新しいグループとユーザーを作成する # ユーザー追加 -M -s /sbin...

フローティングメニュー、上下スクロール効果を実現できます

コードはさらに合理化できますが、時間の制約があるため、まずはここで投稿して、自分で最適化してメニュー...

HTML iframe で親ページと子ページ間の双方向メッセージングを実装する例

ある日、リーダーはメイン ページに iframe を埋め込み、親ページと子ページ間で双方向にメッセー...

MySQL の隠し列の詳細表示

目次1. 主キーが存在する2. 主キーはないが、一意のインデックスが存在する3. 共同主キーまたは共...

Vueコンポーネントドキュメントを自動生成する方法を分析する

目次1. 現状2. コミュニティソリューション2.1 事業レビュー3. 技術的ソリューション3.1....

HTML ヘッドタグの詳細な紹介

HTML のヘッド部分には、ブラウザによる Web ページのレンダリングや SEO などに関連するタ...

portainer を使用してリモート docker に接続するチュートリアル

Portainer は、Docker ホストと Docker Swarm クラスターの管理に使用でき...

MySQL列挙型のテスト例

プロジェクトを開発しているとき、支払い済み、支払済み、クローズ済み、返金済みなどの注文ステータスなど...

Ubuntu に MySQL 5.7 をインストールし、データ ストレージ パスを構成する方法

1. MySQLをインストールするこの記事はAPT経由でインストールされており、インストールされてい...

Linux で boost.python を使用して C++ 動的ライブラリを呼び出す方法

序文最近、C++ 動的ライブラリをテストするためにロボット フレームワークを使い始めました。ロボット...