【訳】runit快速入門
5762 ワード
概要
このチュートリアルでは、runitを迅速に理解し、対応するサービスを構築することができます.
runitは、次の2つのサービスを提供するサービスモニタリング用のUNIXソフトウェアです.サーバが起動すると、定義されたサービスが起動されます. は、実行中のサービスを監視し、サービスが予期せぬ中断が発生した場合、自動的にサービスを再起動する.
このチュートリアルでは、新しいrunitサービスを作成する方法を簡単な例で説明します.詳細についてはrunitの公式ドキュメントを参照してください.
このチュートリアルには、次の3つのセクションがあります. runitテンプレート を作成最初のサービス を作成サービス の自動管理方法
環境の構築
まず、システムにrunitがインストールされていることを確認します.ほとんどのLinuxバージョンのソフトウェアウェアハウスにはrunitパッケージがパッケージされています.たとえば、システムがDebianベースの場合は、次のコマンドを使用してインストールできます.
centosの場合はyumを使用してインストールできますが、デフォルトではcentosソフトウェアウェアハウスにrunitはありませんので、対応するウェアハウスを構成する必要があります.
次のコマンドを実行して、runitがインストールされ、システムがrunitを実行しているかどうかを確認します.
出力結果は次のとおりです.
runsvdirは、runsvdir、runsv、chpst、svlogd、およびsvを含むユーザーのさまざまなニーズを満たすコンポーネントです.
テンプレートの作成
出力結果の
監視されるサービスは、
runsvdirが新しいプロファイルを発見すると、runsvプロセスが自動的に起動してこの構成のサービスを管理します.
runitの設計思想は、各コンポーネントの機能が完全に独立して管理されることである.
開発とテストを容易にするために、
一時ディレクトリとして
本物のrunitサービスを作成する前に、テンプレートを作成します.このテンプレートはrunitの基本的な使い方を示し、後でこのテンプレートを直接使用して新しいサービスを作成することができます.まずtemplateディレクトリを作成します.
次にrunスクリプトを作成します.
runに実行可能権限を追加するには、次の手順に従います.
このスクリプトは、まず標準エラー出力ストリームを標準出力ストリームに出力し、chpstコマンドを実行します.chpstコマンドは、どのユーザを使用してコマンドを実行するかを指定します.runスクリプトはデフォルトでrootユーザによって実行されるため、chpstによってrunを一般ユーザに構成して実行できます.manコマンドでchpstの詳細を表示できます.
runsvdirが
runsvはログサービスを監視することもできますが、ログはアプリケーションで非常に重要です.次に、ログテンプレートを作成します.
まずlogディレクトリを作成します.
次にrunスクリプトを作成します.
runスクリプトに実行可能権限を追加するには、次の手順に従います.
上のスクリプトはchpstを使用してsvlogdデーモンプロセスを起動し、ログ情報をLOGDIRディレクトリに書き込みます.manコマンドを使用してsvlodgに関する詳細情報を取得します.
runsvdirは、
サービスの例
次に、上記で作成したテンプレートを使用して、簡単なサービス構成を作成します.まず、runスクリプトでchpstで使用するユーザーを作成します.
次に、サービス構成を配置するディレクトリを作成し、その所属するユーザーとユーザーグループをfooに設定します.
次にfooユーザーに切り替えます.
スクリプトに実行権限を付与するには、次の手順に従います.
上のスクリプトは、実際のアプリケーションをシミュレートし、1秒おきにログ情報を印刷し、最後にエラー情報を印刷します.このスクリプトを実行してみます.
次に、ログ・サービスを含むディレクトリを作成します.
rootユーザーに戻ります.
次に、以前に作成したテンプレートを使用して、このサンプル・サービスを監視し、一時保存ディレクトリのテンプレート・ファイルを新しいディレクトリexampleにコピーします.
同様に、
スクリプトが正常に動作している場合は、サービスを導入してソフトリンクを作成できます.
意外なことに、runsvdirは私たちが構成した2つのサービスを検出し、2つのrunsvプロセスを起動してサービスを実行し、監視します.次のコマンドで、サービスが正常に動作しているかどうかを検出できます.
出力結果は次のとおりです.
tailコマンドを使用して、ログ情報を表示します.
ログ情報と異常情報が表示され、サービスが再起動されます.
管理サービス
最後に、svの使い方を学び、svは手動でサービスを管理するために使用されます.サービスのステータスをチェック サービス停止
サービスを停止してもログ情報は出力されず、自動的に再起動されることはありません.サービス再開 より多くの使い方
このチュートリアルでは、runitを迅速に理解し、対応するサービスを構築することができます.
runitは、次の2つのサービスを提供するサービスモニタリング用のUNIXソフトウェアです.
このチュートリアルでは、新しいrunitサービスを作成する方法を簡単な例で説明します.詳細についてはrunitの公式ドキュメントを参照してください.
このチュートリアルには、次の3つのセクションがあります.
環境の構築
まず、システムにrunitがインストールされていることを確認します.ほとんどのLinuxバージョンのソフトウェアウェアハウスにはrunitパッケージがパッケージされています.たとえば、システムがDebianベースの場合は、次のコマンドを使用してインストールできます.
# apt-get install runit
centosの場合はyumを使用してインストールできますが、デフォルトではcentosソフトウェアウェアハウスにrunitはありませんので、対応するウェアハウスを構成する必要があります.
# curl -s https://packagecloud.io/install/repositories/imeyer/runit/script.rpm.sh | sudo bash
# sudo yum install runit-2.1.1-7.el7.centos.x86_64
次のコマンドを実行して、runitがインストールされ、システムがrunitを実行しているかどうかを確認します.
# ps -ef | grep runsvdir
出力結果は次のとおりです.
root 2783 1 0 15:34 ? 00:00:00 runsvdir -P /etc/service log:
runsvdirは、runsvdir、runsv、chpst、svlogd、およびsvを含むユーザーのさまざまなニーズを満たすコンポーネントです.
テンプレートの作成
出力結果の
runsvdir -P /etc/service log:.......
に注意してください.runsvdirは、監視されたサービスを構成するために/etc/service/
ディレクトリのファイルを監視することを意味します.監視されるサービスは、
/etc/service
ディレクトリの下にサブディレクトリを作成し、実行可能なスクリプトrunを追加することによって実現される.runsvdirが新しいプロファイルを発見すると、runsvプロセスが自動的に起動してこの構成のサービスを管理します.
runitの設計思想は、各コンポーネントの機能が完全に独立して管理されることである.
man
コマンドを使用して、特定のコンポーネントの使用方法を表示できます.# man runsvdir
/etc/service
が存在することを確認し、存在しない場合はmkdirを使用して対応するディレクトリを作成します.# mkdir /etc/service
開発とテストを容易にするために、
/etc/service/
ディレクトリにプロファイルを直接追加するのではなく、プロファイルを配置するために一時保存されたディレクトリを作成します.独自のテストに満足した後、ソフトリンクを使用して、一時保存ディレクトリを/etc/service
にリンクします.一時ディレクトリとして
/etc/runit
を作成します.# mkdir /etc/runit
本物のrunitサービスを作成する前に、テンプレートを作成します.このテンプレートはrunitの基本的な使い方を示し、後でこのテンプレートを直接使用して新しいサービスを作成することができます.まずtemplateディレクトリを作成します.
# mkdir /etc/runit/template
次にrunスクリプトを作成します.
#!/bin/sh -e
exec 2>&1
exec chpst -u USER COMMAND
runに実行可能権限を追加するには、次の手順に従います.
# chmod +x /etc/runit/template/run
このスクリプトは、まず標準エラー出力ストリームを標準出力ストリームに出力し、chpstコマンドを実行します.chpstコマンドは、どのユーザを使用してコマンドを実行するかを指定します.runスクリプトはデフォルトでrootユーザによって実行されるため、chpstによってrunを一般ユーザに構成して実行できます.manコマンドでchpstの詳細を表示できます.
# man chpst
runsvdirが
/etc/service
ディレクトリの下に新しいディレクトリが含まれていることを確認すると、runsvdirはrunsvプロセスを開始してrunスクリプトを実行および監視します.manコマンドを使用してrunsvの詳細を表示します.#man runsv
runsvはログサービスを監視することもできますが、ログはアプリケーションで非常に重要です.次に、ログテンプレートを作成します.
まずlogディレクトリを作成します.
# mkdir /etc/runit/template/log
次にrunスクリプトを作成します.
#!/bin/sh
exec chpst -u USER svlogd -tt LOGDIR
runスクリプトに実行可能権限を追加するには、次の手順に従います.
# chmod +x /etc/runit/template/log/run
上のスクリプトはchpstを使用してsvlogdデーモンプロセスを起動し、ログ情報をLOGDIRディレクトリに書き込みます.manコマンドを使用してsvlodgに関する詳細情報を取得します.
# man svlogd
runsvdirは、
/etc/service/
ディレクトリで新しい構成を発見すると、サブディレクトリlogを検索し続け、見つかった場合はrunsvプロセスを開始してlogディレクトリの下のrunスクリプトを実行および監視します.サービスの例
次に、上記で作成したテンプレートを使用して、簡単なサービス構成を作成します.まず、runスクリプトでchpstで使用するユーザーを作成します.
# adduser foo
次に、サービス構成を配置するディレクトリを作成し、その所属するユーザーとユーザーグループをfooに設定します.
# mkdir /opt/example
# chown foo:foo /opt/example
次にfooユーザーに切り替えます.
# su foo
/opt/example
ディレクトリにスクリプトfoo-serviceを追加する.sh: #!/bin/bash
echo "Started service..."
for i in {1..30}
do
echo "Doing stuff..."
sleep 1
done
echo "Oh no I crashed..." >&2
exit 1
スクリプトに実行権限を付与するには、次の手順に従います.
# chmod +x /opt/example/foo-service.sh
上のスクリプトは、実際のアプリケーションをシミュレートし、1秒おきにログ情報を印刷し、最後にエラー情報を印刷します.このスクリプトを実行してみます.
# /opt/example/foo-service.sh
次に、ログ・サービスを含むディレクトリを作成します.
# mkdir /opt/example/logs
rootユーザーに戻ります.
# exit
次に、以前に作成したテンプレートを使用して、このサンプル・サービスを監視し、一時保存ディレクトリのテンプレート・ファイルを新しいディレクトリexampleにコピーします.
# cp -R /etc/runit/template /etc/runit/example
/etc/runit/example/run
スクリプトの内容を更新、fooユーザを用いてfoo-serviceを実行する.shスクリプト.#!/bin/sh -e
exec 2>&1
exec chpst -u foo /opt/example/foo-service.sh
同様に、
/etc/runit/example/log/run
スクリプトの内容を更新します.#!/bin/sh
exec chpst -u foo svlogd -tt /opt/example/logs
/etc/service
にサービスを導入する前に、まず構成が正しいかどうかをテストします.# /etc/runit/example/run
スクリプトが正常に動作している場合は、サービスを導入してソフトリンクを作成できます.
# ln -s /etc/runit/example /etc/service/example
意外なことに、runsvdirは私たちが構成した2つのサービスを検出し、2つのrunsvプロセスを起動してサービスを実行し、監視します.次のコマンドで、サービスが正常に動作しているかどうかを検出できます.
# sv status example
出力結果は次のとおりです.
run: example: (pid 3483) 3s; run: log: (pid 3324) 154s
tailコマンドを使用して、ログ情報を表示します.
# tail -f /opt/example/logs/current
ログ情報と異常情報が表示され、サービスが再起動されます.
管理サービス
最後に、svの使い方を学び、svは手動でサービスを管理するために使用されます.
sv status example
sv stop example
サービスを停止してもログ情報は出力されず、自動的に再起動されることはありません.
sv restart example
man sv