services-config.yaml の使用

簡略化された Linux サービス マネージャーを使用して移行を実行すると、Migrate to Containers により新しいアーティファクト ファイル services-config.yaml が作成されます。このファイルを使用して、デプロイされたコンテナでのアプリケーションの初期化を制御します。

たとえば、コンテナを移行したら、services-config.yaml ファイルを編集してアプリケーションの初期化を次のように制御します。

  • ファイルからアプリケーションを削除する
  • ファイルにアプリケーションを追加する
  • アプリケーションの初期化プロパティを編集する

services-config.yaml ファイルの例を以下に示します。

version: v1beta1
env:
  - name: KEY1
    value: VALUE1
  - name: KEY2
    value: VALUE2
applications:
    - name: nginx
      type: forking
      envfile: /path/to/file.txt
      env:
        - name: KEY3
          value: VALUE3
      start:
      - cmd: /usr/sbin/nginx -g 'daemon on; master_process on;'
      pidfile: /run/nginx.pid
    - name: ssh@
      type: simple
      start:
      - cmd: /usr/sbin/sshd -i $SSHD_OPTS
        ignore_errors: true
      runtime_directories:
        mode: "0755"
        paths:
          - /run/sshd
        preserve: true
    - name: suitecrm
      type: exec
      start:
      - cmd: /etc/init.d/suitecrm start
      status:
        cmd: /etc/init.d/suitecrm status
    - name: phpsessionclean
      type: oneshot
      start:
        - cmd: /usr/lib/php/sessionclean
      timers:
        - name: phpsessionclean.timer
          on_calendar:
            - cron: 09,39 * * * *
    - name: mariadb
      type: notify
      prestart:
        - cmd: /usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld
        - cmd: /bin/sh -c "systemctl unset-environment _WSREP_START_POSITION"
        - cmd: /bin/sh -c "[ ! -e /usr/bin/galera_recovery ] && VAR= || VAR=`cd /usr/bin/..; /usr/bin/galera_recovery`; [ $? -eq 0 ] && systemctl set-environment _WSREP_START_POSITION=$VAR || exit 1"
      start:
      - cmd: /usr/sbin/mysqld $MYSQLD_OPTS $_WSREP_NEW_CLUSTER $_WSREP_START_POSITION
      poststart:
        - cmd: /bin/sh -c "systemctl unset-environment _WSREP_START_POSITION"
        - cmd: /etc/mysql/debian-start
      user: mysql
      group: mysql

このファイルの内容は以下のとおりです。

  • env: グローバル レベルまたはアプリケーション レベルの環境変数を指定します。グローバル レベルとアプリケーション レベルの両方で同じ環境変数を指定した場合、アプリケーション レベルの環境変数が優先されます。

    • グローバル レベルで設定される環境変数の場合は、env を使用して name/value ペアを指定します。名前には、ASCII の英字、数字、アンダースコアを使用できます。名前の先頭を数字にすることはできません。

    • アプリケーション レベルで設定する環境変数の場合は、env を使用して name/value ペアを指定します。または、envfile を使用して、次の形式の行を含むテキスト ファイルのパスを指定します。

      # Comments allowed
      KEY=VALUE

      env で指定された環境変数と重複する定義がこのテキスト ファイルに含まれている場合、env で指定された定義が優先されます。

  • applications: コンテナをデプロイするときに起動するアプリケーションのリストを指定し、アプリケーションの初期化プロパティを設定します。

    • name: アプリケーションの名前を指定します。

    • type では、アプリケーションのタイプを次のように指定します。

      • forking: フォークせずに start で指定されたファイルを実行します。サービスの実行可能ファイルはフォークします。pidfile も設定することをおすすめします。

      • exec: フォークしてサービスを実行します。サービスは、実行可能ファイルで exec が呼び出されると、開始したとみなされます。

      • simple - exec と同じです。simple サービスは、fork ではなく forkexec の両方を待つため、systemd 定義とは異なる動作をします。

      • notify: systemd には NOTIFY_SOCKET 環境変数が設定されていないため、sd_notify systemd 呼び出しが機能しないこと以外は、exec と同等です。

      • oneshot: 実行可能ファイルで exec が呼び出されると、サービスが開始したとみなされます。0 以外のエラーコードでサービスが終了した場合、ステータスは error になります。

    • サービスの prestartstartpoststartstatus コマンド。

      サービスを開始する際、Migrate for Containers は、prestart コマンド(存在する場合)、次に start コマンド、最後に poststart コマンド(存在する場合)を実行します。コマンドが失敗し、ignore_errors を使用するようにコマンドを構成していない場合は、サービスが停止し、サービスのステータスにエラー メッセージが表示されます。

      アプリケーションで特定のオペレーションを行うために使用されるコマンドの形式は次のとおりです。

        command-type: 
          cmd: command
          shell: /bin/sh
          ignore_errors: false
          ignore_environment_variables: false

      ここで

      • command-type: コマンドタイプを prestartstartpoststartstatus のいずれかとして指定します。

        start では、typeoneshot の場合を除き、設定できるコマンドは 1 つだけです。

        type=forking または type=oneshot の場合、poststart コマンドは start コマンドのフォーク後に実行されます。それ以外の場合は、start コマンドを実行した直後に実行されます。

      • command: オペレーションを行うために実行するコマンドを指定します。

      • shell(省略可): デフォルトでは、すべてのコマンドが /bin/sh シェルで実行されます。必要に応じて、shell/bin/bash に設定できます。

      • ignore_errors(省略可): true の場合、通常は失敗とみなされるコマンドからの終了コードが記録されますが、コマンドは成功したと見なされます。デフォルト値は false です。

        デフォルトの場合、Migrate to Containers は、接頭辞「-」を含むすべての systemd 実行可能ファイルの ignore_errorstrue に設定します。

      • ignore_environment_variables(省略可): true の場合、環境変数の置換は適用されません。デフォルト値は false です。

        デフォルトの場合、Migrate to Containers は、接頭辞「:」を含むすべての systemd 実行可能ファイルの ignore_environment_variablestrue に設定します。

    • pidfile: プロセスが実行されているかどうかの確認に使用されるサービスのプロセス ID を含む pid ファイルを指定します。

    • chdir: 開始されたプロセスの作業ディレクトリを指定します。

    • user: 新しいプロセスを開始するユーザー名を指定します。

    • group: 新しいプロセスを開始するグループ名を指定します。

    • timers: アプリケーションのタイマーのリストを指定します。指定したタイマーが所定の時間に達すると、アプリケーションがアクティブになります。

      version: v1beta1
      env: []
      Applications:
      - name: service_name
        type: service_type
        start:
          - cmd: service_exec_command
        timers:
          - name: timer_name
            on_calendar:
              - cron: realtime_time
            on_startup:
              - duration: monotonic_time
            on_service_start:
              - duration: monotonic_time
            on_service_stop:
              - duration: monotonic_time
      
      • name: タイマーの名前を指定します。

      • on_calendar: タイマーのカレンダーの予定のリストを指定します。

        • cron: cron 形式で指定した時刻。次に例を示します。

          cron: 0 0 * * *
          cron: @daily
          
      • on_startup: 期間のリストを指定します(コンテナのデプロイ時点からの相対的な時間)。

        • duration: 期間の形式で指定された時刻。次に例を示します。
        duration: 30m
        duration: 1sec
        
      • on_service_start: アプリケーションのステータスがアクティブに変更されたタイミングとの相対的な時間の長さのリストを指定します。

        • duration: 期間の形式で指定された時刻。
      • on_service_stop: アプリケーションのステータスが非アクティブに変更されたタイミングとの相対的な時間の長さのリストを指定します。

        • duration: 期間の形式で指定された時刻。
    • 次のプロパティを使用して、サービスの開始前に作成されるディレクトリに対して paths を指定します。

      • runtime_directories: /run/ で作成されたディレクトリへの paths のリストを指定します。

      • state_directories: /var/lib/ で作成されたディレクトリへの paths のリストを指定します。

      • cache_directories: /var/cache/ で作成されたディレクトリへの paths のリストを指定します。

      • logs_directories: /var/log/ で作成されたディレクトリへの paths のリストを指定します。

      • configuration_directories: /etc/ で作成されたディレクトリへの paths のリストを指定します。

      これらの各プロパティは、以下のオプションを使用します。

      • mode: ファイルモードを指定します。デフォルトは 0755 です。つまり、すべてのユーザーに読み取りアクセス権と実行アクセス権が付与され、オーナーは書き込みアクセス権を付与されます。
      • preserve: false の場合、サービスが停止されるとディレクトリがクリーンアップされます。デフォルトは true です。

services.yaml ファイルにサービスの追加または削除を行う

services.yaml ファイルを手動で編集して、サービスを追加または削除できます。新しいサービスを追加するたびに、次のフィールドに値を入力する必要があります。

  • name
  • type
  • start

サービスの必須フィールドと任意フィールドの詳細については、上記の services.yaml 定義をご覧ください。

サービスを追加する

services.yaml ファイルにサービスを追加するには、次の手順を行います。

  1. 変更する services.yaml ファイルをテキスト エディタで開きます。

  2. services.yaml で、applications 属性に移動します。

    version: v1beta1
    env:
     - name: KEY1
     ...
    applications:
    
  3. applications 属性の下の行に、目的のサービスを追加します。最初に name フィールドを追加し、その後にアプリケーションに適した必須フィールドと任意フィールドを追加します。

    version: v1beta1
    env:
     - name: KEY1
     ...
    applications:
    - name:
      type:
      start:
        - cmd:
      ...
    

    services.yaml ファイルの applications 属性にすでにサービスが定義されている場合は、前のサービスの最後のエントリの下で name フィールドで始まる行に新しいサービスを追加できます。

    version: v1beta1
    env:
     - name: KEY1
     ...
    applications:
    - name:
      type:
      start:
    - name:
      type:
      start:
        ...
    
  4. services.yaml ファイルを保存します。

サービスを削除する

services.yaml ファイルからサービスを削除するには、次の手順を行います。

  1. 変更する services.yaml ファイルをテキスト エディタで開きます。

  2. services.yaml で、applications 属性に移動します。

    version: v1beta1
    env:
     - name: KEY1
     ...
    applications:
    ...
    
  3. name フィールドから始まり、その後にアプリケーションに適切なフィールドと任意フィールドが続く行を削除して、目的のサービスを削除します。次に例を示します。

    サービスの削除前に、次のことを行ってください。

    version: v1beta1
    env:
    - name: KEY1
      ...
    applications:
    - name:
      type:
      start:
        - cmd:
    - name:
      ...
    
    

    サービスの削除後に、次のことを行ってください。

    version: v1beta1
    env:
    - name: KEY1
      ...
    applications:
    - name:
      ...
    
  4. services.yaml ファイルを保存します。