序章

多くのVPS環境では、小さなシェルスクリプト、Node.jsアプリ、または大きなサイズのパッケージなど、永続的に実行したい小さなプログラムが多数ある場合がよくあります。

通常、外部パッケージにはユニットファイルが付属しており、 systemd などのinitシステムで管理したり、dockerイメージとしてパッケージ化したりできます。コンテナエンジンによって管理されます。 ただし、十分にパッケージ化されていないソフトウェアの場合、またはサーバー上の低レベルのinitシステムと対話したくないユーザーの場合は、軽量の代替手段があると便利です。

スーパーバイザーは、多数の長時間実行プログラムを管理および監視するための単一のインターフェースを提供するプロセスマネージャーです。 このチュートリアルでは、LinuxサーバーにSupervisorをインストールし、複数のアプリケーションのSupervisor構成を管理する方法を学習します。

前提条件

このガイドを完了するには、次のものが必要です。

ステップ1-インストール

パッケージソースを更新し、Supervisorをインストールすることから始めます。

  1. sudo apt update && sudo apt install supervisor

スーパーバイザサービスは、インストール後に自動的に実行されます。 あなたはその状態をチェックすることができます:

  1. 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 ホームディレクトリ:

  1. nano ~/idle.sh

次の内容を追加します。

〜/ 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 と入力します。

次に、スクリプトを実行可能にします。

  1. chmod +x ~/idle.sh

スーパーバイザープログラムのプログラムごとの構成ファイルは、 /etc/supervisor/conf.d ディレクトリ。通常、ファイルごとに1つのプログラムを実行し、最後に .conf. このスクリプトの構成ファイルを`/etc/supervisor/conf.d/idle.confとして作成します。

  1. sudo nano /etc/supervisor/conf.d/idle.conf

これらのコンテンツを追加します。

/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_logfilestderr_logfile それぞれの場所。 スーパーバイザーは欠落しているディレクトリーを作成しようとしないため、指定されたディレクトリーはすでに存在している必要があります。

ここで作成した構成は、スーパーバイザープログラムの最小限のテンプレートです。 スーパーバイザーのドキュメントには、プログラムの実行方法を調整するために使用できる、さらに多くのオプションの構成オプションがリストされています。

構成ファイルを作成して保存したら、次の方法で新しいプログラムをスーパーバイザーに通知できます。 supervisorctl 指図。 まず、スーパーバイザーに、新しいまたは変更されたプログラム構成を探すように指示します。 /etc/supervisor/conf.d ディレクトリ:

  1. sudo supervisorctl reread
Output
idle: available

続いて、次のように変更を加えるように指示します。

  1. sudo supervisorctl update
Output
idle: added process group

プログラム構成ファイルに変更を加えるときはいつでも、前の2つのコマンドを実行すると変更が有効になります。

この時点で、プログラムが実行されているはずです。 出力ログファイルを確認することで、その出力を確認できます。

  1. sudo tail /var/log/idle.out.log
Output
Sat 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を実行します。

  1. sudo supervisorctl
Output
idle RUNNING pid 12614, uptime 1:49:37 supervisor>

supervisorctl 最初に、構成されているすべてのプログラムのステータスと稼働時間を出力し、その後にコマンドプロンプトを表示します。 入る help 使用可能なすべてのコマンドが表示されます。

  1. supervisor> help
Output
default 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 関連するコマンドの後にプログラム名が続くプログラム:

  1. supervisor> stop idle
Output
idle: stopped
  1. supervisor> start idle
Output
idle: started

を使用して tail コマンドを実行すると、プログラムのstdoutおよびstderrログの最新のエントリを表示できます。

  1. supervisor> tail idle
Output
Sun 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
  1. supervisor> tail idle stderr
Output
error! error! error! error! error! error! error!

使用する status 変更を加えた後、各プログラムの現在の実行状態を再度表示できます。

  1. supervisor> status
Output
idle STOPPED Nov 21 01:07 AM

最後に、Ctrl + Cを使用するか、次のように入力して、supervisorctlを終了できます。 quit プロンプトに:

  1. supervisor> quit

結論

このチュートリアルでは、Supervisorをインストールして管理する方法を学びました。 前述のように、Supervisorは最新の標準では非常に軽量ですが、引き続き適切に保守されており、小規模な展開に役立つツールになる可能性があります。 また、大規模な展開のコンポーネント部分としてログを生成するためのメンテナンスが少なく、自己完結型の方法でもあります。

Webアクセスが必要な複数の小さなアプリを実行している場合は、 Nginxをリバースプロキシとして構成するについても読むことをお勧めします。これは、小さな再利用可能な展開のもう1つの基本的なコンポーネントです。