使用 services-config.yaml
當您使用簡化的 Linux 服務管理員執行遷移作業時,「遷移至容器」會建立新的構件檔案 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
服務的行為與systemd
定義不同,因為它會同時等待fork
和exec
,而不是等待fork
。notify
:與exec
相同,但systemd
未設定NOTIFY_SOCKET
環境變數,因此sd_notify systemd
呼叫無法運作。oneshot
:在可執行檔上呼叫exec
後,系統會將服務視為已啟動。如果服務結束時傳回的錯誤碼不等於 0,則狀態為error
。
服務的
prestart
、start
、poststart
和status
指令。如要啟動服務,Migrate to 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
。如果是
type=forking
或type=oneshot
,則會在start
指令分支後執行poststart
指令。否則,系統會在執行start
指令後立即執行這些指令。command:指定要執行的指令,以便執行作業。
shell
(選用):根據預設,所有指令都會在/bin/sh
殼層中執行。您可以選擇將shell
設為/bin/bash
。ignore_errors
(選用):如果為true
,則系統會記錄指令的結束代碼,通常會視為失敗,但指令會視為成功。預設值為false
。根據預設,Migrate to Containers 會將
ignore_errors
設為true
,適用於任何包含「-」前置字元的systemd
可執行檔。ignore_environment_variables
(選用):如果為true
,系統就不會套用環境變數替代值。預設值為false
。根據預設,Migrate to Containers 會將
ignore_environment_variables
設為true
,適用於任何包含「:」前置字元的systemd
可執行檔。
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
:指定paths
清單,以便在/run/
中建立目錄。state_directories
:指定paths
清單,以便在/var/lib/
中建立目錄。cache_directories
:指定paths
清單,以便在/var/cache/
中建立目錄。logs_directories
:指定paths
清單,以便在/var/log/
中建立目錄。configuration_directories
:指定paths
清單,以便在/etc/
中建立目錄。
每個屬性都會採用下列選項:
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
檔案。