スーパーバイザー-Linuxサーバーとプロセスを監視します

一部のユーザーは、プロセスの状態を制御するだけでよく、プロセスが実行されているマシンへの本格的なシェルアクセスを必要としないか、必要としません。 多くの場合、「低」TCPポートでリッスンするプロセスを知る必要はなく、rootユーザーとして開始および再起動する必要があります。 多くの場合、優先順位に関して、グループで開始および停止する必要があるプロセスがあります。 ツール名スーパーバイザーは、ユーザーがサーバー上のプロセスを管理し、各プロセスまたはプロセスのグループを監視するのに役立ちます。

スーパーバイザーとは何ですか?

スーパーバイザーは、ユーザーがLinuxおよびUNIXライクなオペレーティングシステム上の多数のプロセスを制御できるようにするクライアント/サーバーシステムです。 プロセスは「プロセスグループ」にグループ化でき、論理的に関連する一連のプロセスを1つのユニットとして停止および開始できます。 fork / execを介してサブプロセスを開始し、サブプロセスはデーモン化されません。 オペレーティングシステムは、プロセスが終了するとすぐにスーパーバイザーに通知します。

スーパーバイザーは、次の4つのコンポーネントに基づいています。

  • 監督: これは、独自の呼び出しで子プログラムを開始し、クライアントからのコマンドに応答し、クラッシュまたは終了したサブプロセスを再起動する役割を担うサーバー部分です。
  • Supervisorctl: これは、supervisordによって提供される機能へのシェルのようなインターフェイスを提供するコマンドラインクライアントピースです。 ユーザーは、さまざまな監視対象プロセスに接続し、管理対象のサブプロセスのステータスを取得し、のサブプロセスを停止および開始し、監視対象の実行中のプロセスのリストを取得できます。
  • Webサーバー: これは、supervisorctlに匹敵する機能を備えた(スパース)Webユーザーインターフェイスであり、インターネットソケットに対してsupervisordを開始すると、ブラウザーを介してアクセスできます。
  • XML-RPCインターフェース: Web UIを提供する同じHTTPサーバーは、スーパーバイザーとそれが実行するプログラムに問い合わせて制御するために使用できるXML-RPCインターフェースを提供します

スーパーバイザーツールを使用すると、プロセスに優先順位を割り当てることができ、ユーザーは、「すべて開始」や「すべて再開」など、supervisorctlクライアントを介してコマンドを発行できます。これにより、事前に割り当てられた優先順位でコマンドが開始されます。 これは完全にPythonで記述されており、実際に使用されるバージョンは3.2.1です。 スーパーバイザーはPython3では機能しません

1)スーパーバイザーをインストールします

スーパーバイザーはインストールの可能性を提供しますが、配布パッケージを介してインストールを示します。

CentOS7で

# yum install epel-release -y && yum update
# yum install supervisor
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.linode.com
 * epel: fedora-epel.mirrors.tds.net
 * extras: mirrors.linode.com
 * updates: mirrors.linode.com
Resolving Dependencies
--> Running transaction check
---> Package supervisor.noarch 0:3.1.4-1.el7 will be installed
--> Processing Dependency: python-meld3 >= 0.6.5 for package: supervisor-3.1.4-1.el7.noarch
--> Processing Dependency: python-setuptools for package: supervisor-3.1.4-1.el7.noarch

Ubuntu16.04の場合

# apt update && apt upgrade
# apt install supervisor
Reading package lists... Done
Building dependency tree 
Reading state information... Done
The following additional packages will be installed:
 python-meld3 python-pkg-resources
Suggested packages:
 python-setuptools supervisor-doc
The following NEW packages will be installed:
 python-meld3 python-pkg-resources supervisor
0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
Need to get 392 kB of archives.

2)監視ツールのスーパーバイザーから始めます

スーパーバイザ設定ファイルは /etc/supervisord.conf。 これは、supervisordコマンドとsupervisorctlコマンドの両方に使用されます。

a)スーパーバイザWebサーバーを設定します

スーパーバイザ設定ファイルには、次の名前の2つのセクションが含まれています。 [unix_http_server][inet_http_server] その下に、UNIXドメインでリッスンするHTTPサーバーの構成パラメーターがあり、TCP(インターネット)ソケットを挿入する必要があります。 セクションは次のようになります

# vim /etc/supervisor.conf

[unix_http_server]

file = /var/run/supervisor/supervisor.sock; (ソケットファイルへのパス); chmod = 0700; sockefファイルモード(デフォルトは0700); chown = nobody:nogroup; ソケットファイルuid:gid owner; username = user; (デフォルトはユーザー名なし(サーバーを開く)); password = 123; (デフォルトはパスワードなし(サーバーを開く))

[inet_http_server] ; inet(TCP)サーバーはデフォルトで無効になっていますport = server-ip-address:9001; (ip_address:port specifier、*:port for all iface)username = user; (デフォルトはユーザー名なし(サーバーを開く))password = 123; (デフォルトはパスワードなし(サーバーを開く))

b)監視するプログラムを追加する

監視対象が何かを行う前に、少なくとも1つ追加する必要があります プログラム プログラム自体を監視できるように、構成のセクションを作成します。 The プログラム セクションでは、supervisordコマンドを呼び出したときに実行および管理されるプログラムを定義します。 したがって、プログラムを追加するには、構成ファイルを編集して最後に追加します。 example、以下のコマンド:

# vim /etc/supervisord.conf

[program:cat-command]

command = / bin / cat; プログラム(相対はPATHを使用し、引数を取ることができます)process_name =%(program_name)s; process_name expr(デフォルト%(program_name)s)numprocs = 1; 開始するプロセスのコピー数(def 1)

[program:apache2]

command = / usr / sbin / httpd -c “ErrorLog / dev / stdout” -DFOREGROUND redirect_stderr = true

c)監督を開始する

監視を開始するには、実行します supervisord 指図。 初めて、あなたは使用することができます -n 起動時の問題や -c 構成ファイルのフルパスを示すフラグ。 結果として生じるプロセスは、それ自体をデーモン化し、ターミナルから切り離します。 オペレーションログを /var/log/supervisor/supervisord.log デフォルトでは。 使用しない場合 -c、supervisordは最初に現在のフォルダー内の構成を検索します

# supervisord -c /etc/supervisord.conf

これで、スーパーバイザログファイルを確認できます

# tail -f /var/log/supervisor/supervisord.log 
2017-09-07 08:30:53,725 INFO daemonizing the supervisord process
2017-09-07 08:30:53,726 INFO supervisord started with pid 789
2017-09-07 08:30:54,729 INFO spawned: 'cat-command' with pid 790
2017-09-07 08:30:54,731 INFO spawned: 'apache2' with pid 791
2017-09-07 08:30:55,805 INFO success: cat-command entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2017-09-07 08:30:55,807 INFO spawned: 'apache2' with pid 794

それが始まることがわかります。 を使用する場合 -n オプションの場合、スーパーバイザーはフォアグラウンドで起動され、端末を制御するためにバックグラウンドで送信する必要があります

3)スーパーバイザーと一緒にプロセスを監視します

Webインターフェースを使用してスーパーバイザーとプロセスを管理するか、またはsupervisorctl コマンドライン。 2つのプロセスを構成しましたが、1つのプロセスがうまく機能しないため、スーパーバイザーがプロセスをチェックする方法を確認します。

a)supervisorctlを使用してプロセスを監視します

Supervisorctlは、いくつかの基本コマンドを使用してプロセスを管理します:停止、開始、ステータス、再起動、リロード、テールなど。プロセスを管理するには、supervisorctlコマンドを使用します。

# supervisorctl status
apache2 FATAL Exited too quickly (process log may have details)
cat-command RUNNING pid 790, uptime 0:02:52

catコマンドはうまく機能しますが、apacheコマンドは機能せず、リターンがあります。

以下のコマンドでプロセスを再開できます

# supervisorctl restart all
cat-command: stopped
cat-command: started
apache2: ERROR (abnormal termination)

b)Webインターフェイスを介してプロセスを監視します

The [inet_http_server] セクションは、Webインターフェイスにアクセスするために使用されるセクションです。 含まれているものは次のようになりますが、別のユーザー名とパスワードを使用できることを覚えておいてください

[inet_http_server] ; inet (TCP) server disabled by default
port=server-ip-address:9001 ; (ip_address:port specifier, *:port for all iface)
username=user ; (default is no username (open server))
password=123 ; (default is no password (open server))

これで、Webブラウザーを開いて、以下のようにポートを使用してサーバーのIPアドレスを入力できます。

ログを再起動、停止、または表示できることがわかります。

サーバー自体を制御する必要はないが、必要なプロセスが起動されているかどうかを監視するだけでよいユーザーに役立つスーパーバイザーを使用して新しいプロセスを監視する方法を見てきました。必要に応じて再起動します。 新しいプロセスを追加するときは、supervisorctlコマンドのrereadおよびupdateコマンドを使用して、supervisorが現在のプロセスに追加するようにする必要があります。