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
이 아닌 한 단일 명령어를 가질 수 있습니다.type=forking
또는type=oneshot
인 경우start
명령어 분기 후poststart
명령어가 실행됩니다. 그렇지 않으면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: 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: ...
applications
속성 아래에서services.yaml
파일에 이미 서비스 정의가 있으면 이전 서비스의 마지막 항목 아래 줄에서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
파일을 저장합니다.