Usar o ficheiro services-config.yaml
Quando usa o gestor de serviços do Linux simplificado para realizar uma migração, o Migrate to Containers cria um novo ficheiro de artefacto, services-config.yaml
.
Use este ficheiro para controlar a inicialização da aplicação num contentor implementado.
Por exemplo, depois de migrar o contentor, edite o ficheiro services-config.yaml
para controlar a inicialização da aplicação para:
- Remova aplicações do ficheiro
- Adicione aplicações ao ficheiro
- Edite as propriedades de inicialização de uma aplicação
Segue-se um exemplo de um ficheiro 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 ficheiro:
env
: especifica variáveis de ambiente ao nível global ou ao nível da aplicação. Se especificar a mesma variável de ambiente nos níveis global e de aplicação, a variável de ambiente no nível de aplicação tem precedência.Para variáveis de ambiente definidas ao nível global, use
env
para especificar um parname
/value
. Os nomes podem conter letras ASCII, dígitos e o caráter de sublinhado. Os nomes não podem começar por um dígito.Para variáveis de ambiente definidas ao nível da aplicação, use
env
para especificar um parname
/value
. Em alternativa, useenvfile
para especificar o caminho para um ficheiro de texto que contenha linhas no formato:# Comments allowed KEY=VALUE
Se o ficheiro de texto contiver uma definição de variável de ambiente que duplica uma especificada por
env
, a especificada porenv
tem precedência.
applications
: especifica a lista de aplicações a iniciar quando implementa o contentor e define as propriedades de inicialização da aplicação.name
: especifica o nome da aplicação.type
especifica o tipo da aplicação, como um dos seguintes:forking
: Execute o ficheiro especificado porstart
sem ramificação. Espera-se que o executável do serviço se ramifique. Recomendamos que também definapidfile
.exec
: divida para executar o serviço. O serviço é considerado iniciado depois deexec
ter sido chamado no ficheiro executável.simple
- Igual aexec
. Um serviçosimple
comporta-se de forma diferente da definiçãosystemd
porque aguardafork
eexec
em vez de apenasfork
.notify
: igual aexec
, exceto que, parasystemd
, a variável de ambienteNOTIFY_SOCKET
não está definida, pelo que as chamadassd_notify systemd
não funcionam.oneshot
: o serviço é considerado iniciado após a chamada deexec
no ficheiro executável. O estado éerror
se o serviço for terminado com um código de erro diferente de 0.
Comandos
prestart
,start
,poststart
estatus
para o serviço.Para iniciar um serviço, o Migrate to Containers executa os comandos
prestart
(se existirem), seguidos do comandostart
e, finalmente, dos comandospoststart
(se existirem). Se um comando falhar e não tiver configurado o comando para usarignore_errors
, o serviço é parado e é apresentada uma mensagem de erro no estado do serviço.Os comandos usados para realizar operações específicas na aplicação têm o seguinte formato:
command-type: cmd: command shell: /bin/sh ignore_errors: false ignore_environment_variables: false
Onde:
command-type: especifica o tipo de comando como
prestart
,start
,poststart
oustatus
.Para o
start
, pode ter um único comando, a menos que otype
sejaoneshot
.Se
type=forking
outype=oneshot
, os comandospoststart
são executados após a ramificação do comandostart
. Caso contrário, são executados imediatamente após a execução do comandostart
.command: especifica o comando a executar para realizar a operação.
shell
(Opcional): por predefinição, todos os comandos são executados no shell/bin/sh
. Opcionalmente, pode definirshell
como/bin/bash
.ignore_errors
(Opcional): setrue
, é registado um código de saída do comando normalmente considerado uma falha, mas o comando é considerado bem-sucedido. O valor predefinido éfalse
.Por predefinição, a opção Migrar para contentores define
ignore_errors
comotrue
para qualquer ficheiro executável que inclua o prefixo "-".systemd
ignore_environment_variables
(Opcional): setrue
, a substituição de variáveis de ambiente não é aplicada. O valor predefinido éfalse
.Por predefinição, a ferramenta Migrate to Containers define
ignore_environment_variables
comotrue
para qualquer executávelsystemd
que inclua o prefixo ":".
pidfile
: especifica o ficheiro 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 utilizador com o qual o novo processo é iniciado.group
: especifica o nome do grupo no qual o novo processo é iniciado.timers
: especifica a lista de temporizadores da aplicação. A aplicação é ativada sempre que qualquer um dos temporizadores especificados expirar.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 temporizador.on_calendar
: especifica a lista de eventos de calendário para o temporizador.cron
: uma hora especificada através do formato cron. Por exemplo:cron: 0 0 * * * cron: @daily
on_startup
: especifica uma lista de durações (relativas ao momento em que implementa o contentor).duration
: uma hora especificada através do formato de duração. Por exemplo:
duration: 30m duration: 1sec
on_service_start
: especifica uma lista de durações relativas ao momento em que o estado da sua aplicação muda para ativo.duration
: uma hora especificada através do formato de duração.
on_service_stop
: especifica uma lista de durações, relativamente ao momento em que o estado da sua aplicação muda para inativo.duration
: uma hora especificada através do 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 diretórios criados em/run/
.state_directories
: especifica a lista depaths
para diretórios criados em/var/lib/
.cache_directories
: especifica a lista depaths
para diretórios criados em/var/cache/
.logs_directories
: especifica a lista depaths
para diretórios criados em/var/log/
.configuration_directories
: especifica a lista depaths
para diretórios criados em/etc/
.
Cada uma destas propriedades tem as seguintes opções:
mode
: especifica o modo do ficheiro. O valor predefinido é 0755, o que corresponde ao acesso de leitura e execução para todos e ao acesso de escrita para o proprietário.preserve
: sefalse
o diretório for limpo quando o serviço for parado. A predefinição étrue
.
Adicione ou remova um serviço do ficheiro services.yaml
Pode adicionar ou remover um serviço do seu ficheiro services.yaml
editando-o manualmente. Sempre que adicionar um novo serviço, tem de preencher os seguintes campos:
name
type
start
Para mais informações acerca dos campos obrigatórios e opcionais de um serviço, consulte a definição de services.yaml
acima.
Adicionar um serviço
Para adicionar um serviço ao seu ficheiro services.yaml
, siga estes passos:
Abra o ficheiro
services.yaml
num editor de texto para modificação.Em
services.yaml
, navegue para o atributoapplications
:version: v1beta1 env: - name: KEY1 ... applications:
Adicione o serviço pretendido na linha abaixo do atributo
applications
, começando pelo camponame
, seguido dos outros campos obrigatórios e opcionais adequados à sua aplicação:version: v1beta1 env: - name: KEY1 ... applications: - name: type: start: - cmd: ...
Se o seu ficheiro
services.yaml
já tiver definições de serviços no atributoapplications
, pode adicionar um novo serviço começando pelo camponame
na linha abaixo da última entrada do serviço anterior:version: v1beta1 env: - name: KEY1 ... applications: - name: type: start: - name: type: start: ...
Guarde o ficheiro
services.yaml
.
Remova um serviço
Para remover um serviço do seu ficheiro services.yaml
, siga estes passos:
Abra o ficheiro
services.yaml
num editor de texto para modificação.Em
services.yaml
, navegue para o atributoapplications
:version: v1beta1 env: - name: KEY1 ... applications: ...
Remova o serviço pretendido começando pelo campo
name
, seguido dos outros campos obrigatórios e opcionais adequados à sua aplicação. Por exemplo:Antes de o serviço ser removido:
version: v1beta1 env: - name: KEY1 ... applications: - name: type: start: - cmd: - name: ...
Após a remoção do serviço:
version: v1beta1 env: - name: KEY1 ... applications: - name: ...
Guarde o ficheiro
services.yaml
.