Como usar services-config.yaml
Quando você usa o gerenciador de serviços simplificado do Linux para realizar uma migração, o Migrate to Containers
cria um novo arquivo de artefato, services-config.yaml
.
Use esse arquivo para controlar a inicialização do aplicativo em um contêiner implantado.
Por exemplo, depois de migrar o contêiner, edite o arquivo services-config.yaml
para controlar a
inicialização do aplicativo e:
- Remover aplicativos do arquivo
- Adicionar aplicativos ao arquivo
- Editar as propriedades de inicialização de um aplicativo
Veja abaixo um exemplo de arquivo 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
Neste arquivo:
env
: especifica variáveis de ambiente no nível global ou no aplicativo. Se você especificar a mesma variável de ambiente nos níveis global e de aplicativo, a variável de ambiente no nível do aplicativo terá precedência.Para variáveis de ambiente definidas no nível global, use
env
para especificar um parname
/value
. Os nomes podem conter letras ASCII, dígitos e o caractere sublinhado. Os nomes não podem começar com um dígito.Para variáveis de ambiente definidas no nível do aplicativo, use
env
para especificar um parname
/value
. Ou useenvfile
para especificar o caminho para um arquivo de texto que contenha linhas no formulário:# Comments allowed KEY=VALUE
Se o arquivo de texto contiver uma definição de variável de ambiente que duplique uma especificada por
env
, a especificada porenv
terá precedência.
applications
: especifica a lista de aplicativos a serem iniciados quando você implanta o contêiner e define as propriedades de inicialização do aplicativo.name
: especifica o nome do aplicativo.type
especifica o tipo de aplicativo, como um dos seguintes:forking
: execute o arquivo especificado porstart
sem bifurcação. O executável do serviço deve ser bifurcado. Recomendamos que você também definapidfile
.exec
: faça a bifurcação para executar o serviço. O serviço é considerado iniciado depois queexec
é chamado no executável.simple
- Igual aexec
. Um serviçosimple
se comporta de maneira diferente da definiçãosystemd
porque aguardafork
eexec
em vez defork
.notify
: igual aexec
, exceto que parasystemd
a variável de ambienteNOTIFY_SOCKET
não é definida, de modo que as chamadassd_notify systemd
não funcionam.oneshot
: o serviço é considerado iniciado depois queexec
é chamado no executável. O status éerror
se o serviço sair com um código de erro diferente de 0.
Comandos
prestart
,start
,poststart
estatus
do serviço.Para iniciar um serviço, o Migrate to Containers executa os comandos
prestart
(se houver), ostart
e, finalmente, os comandospoststart
(se houver). Se um comando falhar e você não tiver configurado o comando para usarignore_errors
, o serviço será interrompido e você verá uma mensagem de erro no status do serviço.Os comandos usados para executar operações específicas no aplicativo têm o formato:
command-type: cmd: command shell: /bin/sh ignore_errors: false ignore_environment_variables: false
Em que:
command-type: especifica o tipo de comando como
prestart
,start
,poststart
oustatus
.Para
start
, é possível ter um único comando, a menos quetype
sejaoneshot
.Se
type=forking
outype=oneshot
, os comandospoststart
serão executados após a bifurcação do comandostart
. Caso contrário, eles serão executados imediatamente após o comandostart
.command: especifica o comando a ser executado para realizar a operação.
shell
(Opcional): por padrão, todos os comandos são executados no shell/bin/sh
. Opcionalmente, você pode definirshell
como/bin/bash
.ignore_errors
(opcional): setrue
, será registrado um código de saída do comando normalmente considerado uma falha, mas o comando será considerado bem-sucedido. O valor padrão éfalse
.Por padrão, o Migrate to Containers define
ignore_errors
comotrue
para qualquer executávelsystemd
que inclua o prefixo "-".ignore_environment_variables
(Opcional): setrue
, a substituição da variável de ambiente não será aplicada. O valor padrão éfalse
.Por padrão, o Migrate to Containers define
ignore_environment_variables
comotrue
para qualquer executávelsystemd
que inclua o prefixo ":".
pidfile
: especifica o arquivo pid que contém o ID do processo do serviço usado para verificar se o processo ainda está em execução.chdir
: especifica o diretório de trabalho do processo iniciado.user
: especifica o nome de usuário com que o novo processo foi iniciado.group
: especifica o nome do grupo com que o novo processo foi iniciado.timers
: especifica a lista de timers do aplicativo. O aplicativo será ativado sempre que um dos timers especificados decorrer.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
: especifica o nome do timer.on_calendar
: especifica a lista de eventos da agenda do timer.cron
: um horário especificado usando o formato cron. Exemplo:cron: 0 0 * * * cron: @daily
on_startup
: especifica uma lista de durações (em relação à implantação do contêiner).duration
: um horário especificado usando o formato de duração. Exemplo:
duration: 30m duration: 1sec
on_service_start
: especifica uma lista de durações, em relação a quando o status do aplicativo muda para ativo.duration
: um horário especificado usando o formato de duração.
on_service_stop
: especifica uma lista de durações, em relação a quando o status do aplicativo é muda para inativo.duration
: um horário especificado usando o formato de duração.
Use as seguintes propriedades para especificar
paths
para diretórios criados antes de iniciar o serviço:runtime_directories
: especifica a lista depaths
para os diretórios criados em/run/
.state_directories
: especifica a lista depaths
para os diretórios criados em/var/lib/
.cache_directories
: especifica a lista depaths
para os diretórios criados em/var/cache/
.logs_directories
: especifica a lista depaths
para os diretórios criados em/var/log/
.configuration_directories
: especifica a lista depaths
para os diretórios criados em/etc/
.
Cada uma dessas propriedades tem as seguintes opções:
mode
: especifica o modo de arquivo. O padrão é 0755, correspondente a acesso de leitura e execução para todos, e acesso de gravação para o proprietário.preserve
: sefalse
o diretório for limpo quando o serviço for interrompido. O padrão étrue
.
Adicionar ou remover um serviço no arquivo services.yaml
É possível adicionar ou remover um serviço pelo arquivo services.yaml
editando-o
manualmente. Sempre que você adicionar um novo serviço, precisará preencher os seguintes
campos:
name
type
start
Para mais informações sobre os campos obrigatórios e opcionais de um serviço, consulte
a definição services.yaml
acima.
Adicionar um serviço
Para adicionar um serviço ao arquivo services.yaml
, siga estas etapas:
Abra o arquivo
services.yaml
em um editor de texto para modificação.Em
services.yaml
, navegue até o atributoapplications
:version: v1beta1 env: - name: KEY1 ... applications:
Adicione o serviço desejado na linha abaixo do atributo
applications
, começando com o camponame
, seguido pelos outros campos obrigatórios e opcionais adequados ao aplicativo:version: v1beta1 env: - name: KEY1 ... applications: - name: type: start: - cmd: ...
Se o arquivo
services.yaml
já tiver definições de serviço no atributoapplications
, adicione um novo serviço a partir do camponame
na linha abaixo da última entrada do serviço anterior:version: v1beta1 env: - name: KEY1 ... applications: - name: type: start: - name: type: start: ...
Salve o arquivo
services.yaml
.
Remover um serviço
Para remover um serviço do arquivo services.yaml
, siga estas etapas:
Abra o arquivo
services.yaml
em um editor de texto para modificação.Em
services.yaml
, navegue até o atributoapplications
:version: v1beta1 env: - name: KEY1 ... applications: ...
Remova o serviço desejado começando com o campo
name
, seguido pelos outros campos obrigatórios e opcionais apropriados para o aplicativo. Exemplo:Antes de o serviço ser removido:
version: v1beta1 env: - name: KEY1 ... applications: - name: type: start: - cmd: - name: ...
Depois que o serviço for removido:
version: v1beta1 env: - name: KEY1 ... applications: - name: ...
Salve o arquivo
services.yaml
.