【訳】runit快速入門

5762 ワード

概要
このチュートリアルでは、runitを迅速に理解し、対応するサービスを構築することができます.
runitは、次の2つのサービスを提供するサービスモニタリング用のUNIXソフトウェアです.
  • サーバが起動すると、定義されたサービスが起動されます.
  • は、実行中のサービスを監視し、サービスが予期せぬ中断が発生した場合、自動的にサービスを再起動する.

  • このチュートリアルでは、新しいrunitサービスを作成する方法を簡単な例で説明します.詳細についてはrunitの公式ドキュメントを参照してください.
    このチュートリアルには、次の3つのセクションがあります.
  • runitテンプレート
  • を作成
  • 最初のサービス
  • を作成
  • サービス
  • の自動管理方法
    環境の構築
    まず、システムに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