[訳]runit快速入門


ルニートquick start
概要
この教程を通して、私達は速やかにルニートを理解し、相応のサービスを構築することができます。
runitはサービス監視用のUNIXソフトウェアで、以下の2つのサービスを提供しています。
  • は、サーバが起動すると定義されたサービスを開始する。
  • 運転サービスを監視し、サービスが突然中断された場合、自動的にサービスを再開します。
  • この教程は簡単な例を通して、新しいルーニーサービスの作成方法を説明します。もっと知りたいなら、ルーニーの公式文書を見ることができます。
    本教程には以下の3つの部分が含まれています。
  • ルーニーテンプレート
  • を作成します。
  • は、最初のサービス
  • を作成する。
  • どうやって自動管理サービス
  • 環境を築く
    まず、システムはルーニーをインストールして、ほとんどのLinuxバージョンのソフトウェア倉庫にはルーニーバッグがあります。例えば、あなたのシステムがDebianに基づいている場合、以下のコマンドでインストールできます。
    # apt-get install runit
    centosならyumを使ってインストールできますが、デフォルトではcentosソフトウェア倉庫にはルーニーがありませんので、とりあえず相応の倉庫を配置してください。
    # 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
    以下のコマンドを実行して、ルビーがインストールされていたかどうかを確認して、システムは既にルニートを実行しています。
    # ps -ef | grep runsvdir 
    出力結果は以下の通りです。
    root  2783   1  0 15:34 ? 00:00:00 runsvdir -P /etc/service log: 
    runsvdirは実はセットのコンポーネントで、これらのコンポーネントはユーザーの各種の需要を満たすことができて、核心のコンポーネントはrunsvdir、runsv、chpspt、svlogdとsvを含みます。
    テンプレートを作成
    注意出力結果のrunsvdir -P /etc/service log:.......は、監視されたサービスを構成するためにルビンvdirが/etc/service/ディレクトリのファイルを監視するという意味である。
    監視されたサービスは、/etc/serviceディレクトリの下でサブディレクトリを作成し、実行可能なスクリプトrunを追加することによって実現される。
    runsvdirが新しいプロファイルを発見すると、自動的にこの設定のサービスを管理するためにrunsvプロセスを起動します。
    ルニートのデザイン思想は各コンポーネントの機能が完全に独立していて、管理しています。manコマンドを使用して、特定のコンポーネントの使い方を確認することができます。
    # man runsvdir
    /etc/serviceが存在することを保証し、存在しない場合は、mkdirを使用して対応するディレクトリを作成する。
    # mkdir /etc/service
    開発とテストを容易にするために、ここでは直接に/etc/service/ディレクトリに配置ファイルを追加するのではなく、一時保存したディレクトリを作成して配置ファイルを配置します。私たちは自分のテストに満足した後、ソフトリンクを使って、一時ディレクトリを/etc/serviceにリンクします。
    一時保存ディレクトリとして/etc/runitを作成します。
    # mkdir  /etc/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
    このスクリプトはまず標準エラー出力ストリームを標準出力ストリームに出力して、chpsptコマンドを実行します。chpsptコマンドは、どのユーザを使用してコマンドを実行するかを指定します。runスクリプトはデフォルトではrootユーザによって実行されるので、chputによってrunを普通のユーザに設定して実行することができる。マンコマンドでchpspの詳細を確認できます。
    # man chpst
    ルーnsvdirが/etc/serviceディレクトリの下に新しいディレクトリが含まれていることを確認すると、runsvdirはrunsvプロセスを起動して、runスクリプトを実行し、監視します。マンコマンドによりルーンvの詳細を確認します。
    #man runsv
    runsvはログサービスを監視することもできます。ログはアプリケーションで非常に重要です。以下にログテンプレートを作成します。
    まずロゴディレクトリを作成します。
    # mkdir /etc/runit/template/log
    次にルンスクリプトを作成します。
    #!/bin/sh
    exec chpst -u USER svlogd -tt LOGDIR
    ルーンスクリプトに実行可能な権限を追加します。
    # chmod +x /etc/runit/template/log/run
    上のスクリプトはchpspを使ってsvlogdを起動します。このプロセスはログ情報をLOGDIRディレクトリに書き込みます。マンコマンドを使用してsvlodgに関する情報を取得します。
    # man svlogd
    /etc/service/ディレクトリに新たな構成が発見されると、ルセンvdirはサブディレクトリのロゴを検索し続けます。見つかったら、ログディレクトリ下のルンスクリプトを実行し、監視するためにルンvプロセスを起動します。
    サービスの例
    次に、上で作成したテンプレートを使って簡単なサービス構成を作成します。まず、runスクリプトでchpspによって使用されるユーザを作成します。
    # 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は私たちが設定した二つのサービスを検出して、二つの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