スーパーバイザーをインストールおよび管理する方法

提供:Dev Guides
移動先:案内検索

序章

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

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

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

前提条件

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

または、このページに埋め込まれているインタラクティブ端末を使用して、このチュートリアルのサンプルコマンドを試すこともできます。 次のインタラクティブターミナルの起動!ボタンをクリックしてターミナルウィンドウを開き、Linux(Ubuntu)環境での作業を開始します。

インタラクティブターミナルを起動します!

ステップ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

次の内容を追加します。

〜/ 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を押してEnterキーを押します。

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

chmod +x ~/idle.sh

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

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行は、特定の条件下でのスクリプトの自動動作を定義しています。

autostartオプションは、システムの起動時にこのプログラムを開始する必要があることをスーパーバイザーに通知します。 これをfalseに設定すると、システムのシャットダウン後に手動で開始する必要があります。

autorestartは、プログラムが終了した場合にスーパーバイザーがプログラムを管理する方法を定義します。

  • falseは、プログラムの終了後にプログラムを再起動しないようにスーパーバイザーに指示します。
  • trueは、プログラムが終了した後は常にプログラムを再起動するようにスーパーバイザーに指示します。
  • unexpectedは、予期しないエラーコード(デフォルトではコード0または2以外)で終了した場合にのみプログラムを再起動するようにスーパーバイザーに指示します。 エラーコードの詳細については、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ディレクトリで新しいまたは変更されたプログラム構成を探すように指示します。

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を使用するか、プロンプトにquitと入力して、supervisorctlを終了できます。

supervisor> quit

結論

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

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