スーパーバイザーをインストールおよび管理する方法
序章
多くのVPS環境では、小さなシェルスクリプト、Node.jsアプリ、または大きなサイズのパッケージなど、永続的に実行したい小さなプログラムが多数ある場合がよくあります。
通常、外部パッケージにはユニットファイルが付属しており、 systemd などのinitシステムで管理したり、dockerイメージとしてパッケージ化したりできます。コンテナエンジンによって管理されます。 ただし、十分にパッケージ化されていないソフトウェアの場合、またはサーバー上の低レベルのinitシステムと対話したくないユーザーの場合は、軽量の代替手段があると便利です。
スーパーバイザーは、多数の長時間実行プログラムを管理および監視するための単一のインターフェースを提供するプロセスマネージャーです。 このチュートリアルでは、LinuxサーバーにSupervisorをインストールし、複数のアプリケーションのSupervisor構成を管理する方法を学習します。
前提条件
このガイドを完了するには、次のものが必要です。
- Linuxサーバーとsudo権限を持つroot以外のユーザー。 これらの権限を持つユーザーを設定する方法の詳細については、 Ubuntu20.04を使用したサーバーの初期設定ガイドをご覧ください。
ステップ1-インストール
パッケージソースを更新し、Supervisorをインストールすることから始めます。
- sudo apt update && sudo apt install supervisor
スーパーバイザサービスは、インストール後に自動的に実行されます。 あなたはその状態をチェックすることができます:
- sudo systemctl status supervisor
次の出力が表示されます。
Output● supervisor.service - Supervisor process control system for UNIX
Loaded: loaded (/lib/systemd/system/supervisor.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2021-11-17 22:56:48 UTC; 5min ago
スーパーバイザーがインストールされたので、最初のプログラムの追加を確認できます。
ステップ2-プログラムを追加する
スーパーバイザーを操作するためのベストプラクティスは、スーパーバイザーが処理するすべてのプログラムの構成ファイルを作成することです。
スーパーバイザーで実行されるすべてのプログラムは、非デーモンモード(「フォアグラウンドモード」とも呼ばれる)で実行する必要があります。 デフォルトで、プログラムが実行後に自動的にシェルに戻る場合は、プログラムのマニュアルを参照してこのモードを有効にするオプションを見つける必要があります。そうしないと、スーパーバイザーはプログラムのステータスを適切に判断できません。
スーパーバイザーの機能を示すために、1秒に1回予測可能な出力を生成するだけで、手動で停止するまでバックグラウンドで継続的に実行されるシェルスクリプトを作成します。 使用する nano
またはお気に入りのテキストエディタで、というファイルを開きます idle.sh
ホームディレクトリ:
- nano ~/idle.sh
次の内容を追加します。
#!/bin/bash
while true
do
# Echo current date to stdout
echo `date`
# Echo 'error!' to stderr
echo 'error!' >&2
sleep 1
done
ファイルを保存して閉じます。 使用している場合 nano
、 押す Ctrl+X
、プロンプトが表示されたら、 Y
と入力します。
次に、スクリプトを実行可能にします。
- chmod +x ~/idle.sh
スーパーバイザープログラムのプログラムごとの構成ファイルは、 /etc/supervisor/conf.d
ディレクトリ。通常、ファイルごとに1つのプログラムを実行し、最後に .conf.
このスクリプトの構成ファイルを`/etc/supervisor/conf.d/idle.confとして作成します。
- sudo nano /etc/supervisor/conf.d/idle.conf
これらのコンテンツを追加します。
command=/home/ubuntu/idle.sh
autostart=true
autorestart=true
stderr_logfile=/var/log/idle.err.log
stdout_logfile=/var/log/idle.out.log
この行を1行ずつ確認します。
command=/home/ubuntu/idle.sh
構成は、名前でプログラムを定義することから始まります idle
プログラムへのフルパス:
autostart=true
autorestart=true
次の2行は、特定の条件下でのスクリプトの自動動作を定義しています。
The autostart
オプションは、システムの起動時にこのプログラムを開始する必要があることをスーパーバイザーに通知します。 これをfalseに設定すると、システムのシャットダウン後に手動で開始する必要があります。
autorestart
プログラムが終了した場合にスーパーバイザーがプログラムを管理する方法を定義します。
false
プログラムの終了後にプログラムを再起動しないようにスーパーバイザーに指示します。true
プログラムが終了した後は常にプログラムを再起動するようにスーパーバイザーに指示します。unexpected
プログラムが予期しないエラーコード(デフォルトではコード0または2以外)で終了した場合にのみプログラムを再起動するようにSupervisorに指示します。 エラーコードの詳細については、errno
指図。
stderr_logfile=/var/log/idle.err.log
stdout_logfile=/var/log/idle.out.log
最後の2行は、プログラムの2つのメインログファイルの場所を定義します。 オプション名で示されているように、stdoutとstderrは stdout_logfile
と stderr_logfile
それぞれの場所。 スーパーバイザーは欠落しているディレクトリーを作成しようとしないため、指定されたディレクトリーはすでに存在している必要があります。
ここで作成した構成は、スーパーバイザープログラムの最小限のテンプレートです。 スーパーバイザーのドキュメントには、プログラムの実行方法を調整するために使用できる、さらに多くのオプションの構成オプションがリストされています。
構成ファイルを作成して保存したら、次の方法で新しいプログラムをスーパーバイザーに通知できます。 supervisorctl
指図。 まず、スーパーバイザーに、新しいまたは変更されたプログラム構成を探すように指示します。 /etc/supervisor/conf.d
ディレクトリ:
- sudo supervisorctl reread
Outputidle: available
続いて、次のように変更を加えるように指示します。
- sudo supervisorctl update
Outputidle: added process group
プログラム構成ファイルに変更を加えるときはいつでも、前の2つのコマンドを実行すると変更が有効になります。
この時点で、プログラムが実行されているはずです。 出力ログファイルを確認することで、その出力を確認できます。
- sudo tail /var/log/idle.out.log
OutputSat Nov 20 22:21:22 UTC 2021
Sat Nov 20 22:21:23 UTC 2021
Sat Nov 20 22:21:24 UTC 2021
Sat Nov 20 22:21:25 UTC 2021
Sat Nov 20 22:21:26 UTC 2021
Sat Nov 20 22:21:27 UTC 2021
Sat Nov 20 22:21:28 UTC 2021
Sat Nov 20 22:21:29 UTC 2021
Sat Nov 20 22:21:30 UTC 2021
Sat Nov 20 22:21:31 UTC 2021
次に、Supervisorのその他の使用法について説明します。
ステップ3-プログラムの管理
プログラムを実行するだけでなく、プログラムを停止、再起動、またはステータスを確認する必要があります。 ステップ2で使用したsupervisorctlプログラムにも、プログラムを制御するために使用できる対話型モードがあります。
インタラクティブモードに入るには、引数なしでsupervisorctlを実行します。
- sudo supervisorctl
Outputidle RUNNING pid 12614, uptime 1:49:37
supervisor>
supervisorctl
最初に、構成されているすべてのプログラムのステータスと稼働時間を出力し、その後にコマンドプロンプトを表示します。 入る help
使用可能なすべてのコマンドが表示されます。
- supervisor> help
Outputdefault commands (type help <topic>):
=====================================
add clear fg open quit remove restart start stop update
avail exit maintail pid reload reread shutdown status tail version
あなたはできる start
また stop
関連するコマンドの後にプログラム名が続くプログラム:
- supervisor> stop idle
Outputidle: stopped
- supervisor> start idle
Outputidle: started
を使用して tail
コマンドを実行すると、プログラムのstdoutおよびstderrログの最新のエントリを表示できます。
- supervisor> tail idle
OutputSun Nov 21 00:36:10 UTC 2021
Sun Nov 21 00:36:11 UTC 2021
Sun Nov 21 00:36:12 UTC 2021
Sun Nov 21 00:36:13 UTC 2021
Sun Nov 21 00:36:14 UTC 2021
Sun Nov 21 00:36:15 UTC 2021
Sun Nov 21 00:36:17 UTC 2021
- supervisor> tail idle stderr
Outputerror!
error!
error!
error!
error!
error!
error!
使用する status
変更を加えた後、各プログラムの現在の実行状態を再度表示できます。
- supervisor> status
Outputidle STOPPED Nov 21 01:07 AM
最後に、Ctrl + Cを使用するか、次のように入力して、supervisorctlを終了できます。 quit
プロンプトに:
- supervisor> quit
結論
このチュートリアルでは、Supervisorをインストールして管理する方法を学びました。 前述のように、Supervisorは最新の標準では非常に軽量ですが、引き続き適切に保守されており、小規模な展開に役立つツールになる可能性があります。 また、大規模な展開のコンポーネント部分としてログを生成するためのメンテナンスが少なく、自己完結型の方法でもあります。
Webアクセスが必要な複数の小さなアプリを実行している場合は、 Nginxをリバースプロキシとして構成するについても読むことをお勧めします。これは、小さな再利用可能な展開のもう1つの基本的なコンポーネントです。