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
ではなくfork
とexec
の両方を待つため、systemd
定義とは異なる動作をします。notify
:systemd
にはNOTIFY_SOCKET
環境変数が設定されていないため、sd_notify systemd
呼び出しが機能しないこと以外は、exec
と同等です。oneshot
: 実行可能ファイルでexec
が呼び出されると、サービスが開始したとみなされます。0 以外のエラーコードでサービスが終了した場合、ステータスはerror
になります。
サービスの
prestart
、start
、poststart
、status
コマンド。サービスを開始する際、Migrate for Containers は、
prestart
コマンド(存在する場合)、次にstart
コマンド、最後にpoststart
コマンド(存在する場合)を実行します。コマンドが失敗し、ignore_errors
を使用するようにコマンドを構成していない場合は、サービスが停止し、サービスのステータスにエラー メッセージが表示されます。アプリケーションで特定のオペレーションを行うために使用されるコマンドの形式は次のとおりです。
command-type: cmd: command shell: /bin/sh ignore_errors: false ignore_environment_variables: false
ここで
command-type: コマンドタイプを
prestart
、start
、poststart
、status
のいずれかとして指定します。start
では、type
がoneshot
の場合を除き、設定できるコマンドは 1 つだけです。type=forking
またはtype=oneshot
の場合、poststart
コマンドはstart
コマンドのフォーク後に実行されます。それ以外の場合は、start
コマンドを実行した直後に実行されます。command: オペレーションを行うために実行するコマンドを指定します。
shell
(省略可): デフォルトでは、すべてのコマンドが/bin/sh
シェルで実行されます。必要に応じて、shell
を/bin/bash
に設定できます。ignore_errors
(省略可):true
の場合、通常は失敗とみなされるコマンドからの終了コードが記録されますが、コマンドは成功したと見なされます。デフォルト値はfalse
です。デフォルトの場合、Migrate to Containers は、接頭辞「-」を含むすべての
systemd
実行可能ファイルのignore_errors
をtrue
に設定します。ignore_environment_variables
(省略可):true
の場合、環境変数の置換は適用されません。デフォルト値はfalse
です。デフォルトの場合、Migrate to Containers は、接頭辞「:」を含むすべての
systemd
実行可能ファイルのignore_environment_variables
をtrue
に設定します。
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
ファイルにサービスを追加するには、次の手順を行います。
変更する
services.yaml
ファイルをテキスト エディタで開きます。services.yaml
で、applications
属性に移動します。version: v1beta1 env: - name: KEY1 ... applications:
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: ...
services.yaml
ファイルを保存します。
サービスを削除する
services.yaml
ファイルからサービスを削除するには、次の手順を行います。
変更する
services.yaml
ファイルをテキスト エディタで開きます。services.yaml
で、applications
属性に移動します。version: v1beta1 env: - name: KEY1 ... applications: ...
name
フィールドから始まり、その後にアプリケーションに適切なフィールドと任意フィールドが続く行を削除して、目的のサービスを削除します。次に例を示します。サービスの削除前に、次のことを行ってください。
version: v1beta1 env: - name: KEY1 ... applications: - name: type: start: - cmd: - name: ...
サービスの削除後に、次のことを行ってください。
version: v1beta1 env: - name: KEY1 ... applications: - name: ...
services.yaml
ファイルを保存します。