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_timename: タイマーの名前を指定します。on_calendar: タイマーのカレンダーの予定のリストを指定します。cron: cron 形式で指定した時刻。次に例を示します。cron: 0 0 * * * cron: @daily
on_startup: 期間のリストを指定します(コンテナのデプロイ時点からの相対的な時間)。duration: 期間の形式で指定された時刻。次に例を示します。
duration: 30m duration: 1secon_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 ファイルを手動で編集して、サービスを追加または削除できます。新しいサービスを追加するたびに、次のフィールドに値を入力する必要があります。
nametypestart
サービスの必須フィールドと任意フィールドの詳細については、上記の 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ファイルを保存します。