Utilizzo di services-config.yaml
Quando utilizzi il gestore dei servizi Linux semplificato per eseguire una migrazione, Migrate to Containers
crea un nuovo file di elementi services-config.yaml
.
Utilizza questo file per controllare l'inizializzazione dell'applicazione in un container di cui è stato eseguito il deployment.
Ad esempio, dopo la migrazione del contenitore, modifica il file services-config.yaml
per controllare l'inizializzazione dell'applicazione in modo che:
- Rimuovere le applicazioni dal file
- Aggiungere applicazioni al file
- Modificare le proprietà di inizializzazione di un'applicazione
Di seguito è riportato un esempio di file 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
In questo file:
env
: specifica le variabili di ambiente a livello globale o di applicazione. Se specifichi la stessa variabile di ambiente sia a livello globale che a livello di applicazione, la variabile di ambiente a livello di applicazione ha la precedenza.Per le variabili di ambiente impostate a livello globale, utilizza
env
per specificare una coppianame
/value
. I nomi possono contenere lettere ASCII, cifre e il carattere trattino basso. I nomi non possono iniziare con una cifra.Per le variabili di ambiente impostate a livello di applicazione, utilizza
env
per specificare una coppianame
/value
. In alternativa, utilizzaenvfile
per specificare il percorso di un file di testo contenente righe nel seguente formato:# Comments allowed KEY=VALUE
Se il file di testo contiene una definizione di variabile di ambiente che duplica quella specificata da
env
, avrà la precedenza quella specificata daenv
.
applications
: specifica l'elenco di applicazioni da avviare quando viene eseguito il deployment del contenitore e imposta le proprietà di inizializzazione dell'applicazione.name
: specifica il nome dell'applicazione.type
specifica il tipo di applicazione, che può essere uno dei seguenti:forking
: esegui il file specificato dastart
senza eseguire il fork. L'eseguibile del servizio dovrebbe eseguire il fork. Ti consigliamo di impostare anchepidfile
.exec
: esegui il fork per eseguire il servizio. Il servizio viene considerato avviato dopo cheexec
è stato chiamato nell'eseguibile.simple
: comeexec
. Un serviziosimple
si comporta in modo diverso rispetto alla definizione disystemd
perché attende siafork
siaexec
anzichéfork
.notify
: comeexec
, tranne per il fatto che persystemd
la variabile di ambienteNOTIFY_SOCKET
non è impostata, quindi le chiamatesd_notify systemd
non funzionano.oneshot
: il servizio viene considerato avviato dopo la chiamata aexec
nell'eseguibile. Lo stato èerror
se il servizio esce con un codice di errore non uguale a 0.
Comandi
prestart
,start
,poststart
estatus
per il servizio.Per avviare un servizio, Migrate to Containers esegue i comandi
prestart
(se presenti), poi il comandostart
e infine i comandipoststart
(se presenti). Se un comando non va a buon fine e non lo hai configurato per l'utilizzo diignore_errors
, il servizio viene interrotto e viene visualizzato un messaggio di errore nello stato del servizio.I comandi utilizzati per eseguire operazioni specifiche nell'applicazione hanno il seguente formato:
command-type: cmd: command shell: /bin/sh ignore_errors: false ignore_environment_variables: false
Dove:
command-type: specifica il tipo di comando come
prestart
,start
,poststart
ostatus
.Per
start
, puoi avere un singolo comando, a meno chetype
non siaoneshot
.Se
type=forking
otype=oneshot
, i comandipoststart
vengono eseguiti dopo il fork del comandostart
. In caso contrario, vengono eseguiti immediatamente dopo l'esecuzione del comandostart
.command: specifica il comando da eseguire per eseguire l'operazione.
shell
(Facoltativo) Per impostazione predefinita, tutti i comandi vengono eseguiti nella shell/bin/sh
. Facoltativamente, puoi impostareshell
su/bin/bash
.ignore_errors
(Facoltativo): setrue
, viene registrato un codice di uscita del comando normalmente considerato un errore, ma il comando è considerato riuscito. Il valore predefinito èfalse
.Per impostazione predefinita, Migrate to Containers imposta
ignore_errors
sutrue
per qualsiasi file eseguibilesystemd
che include il prefisso "-".ignore_environment_variables
(Facoltativo): setrue
, la sostituzione variabile di ambiente non viene applicata. Il valore predefinito èfalse
.Per impostazione predefinita, Migrate to Containers imposta
ignore_environment_variables
sutrue
per qualsiasi file eseguibilesystemd
che include il prefisso ":".
pidfile
: specifica il file pid contenente l'ID processo del servizio utilizzato per verificare se il processo è ancora in esecuzione.chdir
: specifica la directory di lavoro del processo avviato.user
: specifica il nome utente con cui viene avviato il nuovo processo.group
: specifica il nome del gruppo in cui viene avviato il nuovo processo.timers
: specifica l'elenco dei timer dell'applicazione. L'applicazione verrà attivata ogni volta che trascorre uno dei timer specificati.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
: specifica il nome del timer.on_calendar
: specifica l'elenco di eventi nel calendario per il timer.cron
: un'ora specificata nel formato cron. Ad esempio:cron: 0 0 * * * cron: @daily
on_startup
: specifica un elenco di durate (relative al deployment del contenitore).duration
: un'ora specificata utilizzando il formato della durata. Ad esempio:
duration: 30m duration: 1sec
on_service_start
: specifica un elenco di durate relative al momento in cui lo stato dell'applicazione diventa attivo.duration
: un'ora specificata utilizzando il formato della durata.
on_service_stop
: specifica un elenco di durate relative al momento in cui lo stato dell'applicazione diventa inattivo.duration
: un'ora specificata utilizzando il formato della durata.
Utilizza le seguenti proprietà per specificare
paths
per le directory create prima dell'avvio del servizio:runtime_directories
: specifica l'elenco dipaths
alle directory create in/run/
.state_directories
: specifica l'elenco dipaths
alle directory create in/var/lib/
.cache_directories
: specifica l'elenco dipaths
alle directory create in/var/cache/
.logs_directories
: specifica l'elenco dipaths
alle directory create in/var/log/
.configuration_directories
: specifica l'elenco dipaths
alle directory create in/etc/
.
Ognuna di queste proprietà accetta le seguenti opzioni:
mode
: specifica la modalità del file. Il valore predefinito è 0755, corrispondente all'accesso in lettura ed esecuzione per tutti e all'accesso in scrittura per il proprietario.preserve
: sefalse
, la directory viene ripulita quando il servizio viene interrotto. Il valore predefinito ètrue
.
Aggiungere o rimuovere un servizio dal file services.yaml
Puoi aggiungere o rimuovere un servizio dal file services.yaml
modificandolo manualmente. Ogni volta che aggiungi un nuovo servizio, devi compilare i seguenti campi:
name
type
start
Per ulteriori informazioni sui campi obbligatori e facoltativi per un servizio, consulta la definizione di services.yaml
riportata sopra.
Aggiungi un servizio.
Per aggiungere un servizio al file services.yaml
:
Apri il file
services.yaml
in un editor di testo per modificarlo.In
services.yaml
, vai all'attributoapplications
:version: v1beta1 env: - name: KEY1 ... applications:
Aggiungi il servizio desiderato nella riga sotto l'attributo
applications
, iniziando con il camponame
, seguito dagli altri campi obbligatori e facoltativi appropriati alla tua applicazione:version: v1beta1 env: - name: KEY1 ... applications: - name: type: start: - cmd: ...
Se il file
services.yaml
contiene già definizioni di servizi nell'attributoapplications
, puoi aggiungere un nuovo servizio iniziando con ilname
campo nella riga sotto l'ultima voce del servizio precedente:version: v1beta1 env: - name: KEY1 ... applications: - name: type: start: - name: type: start: ...
Salva il file
services.yaml
.
Rimuovere un servizio
Per rimuovere un servizio dal file services.yaml
:
Apri il file
services.yaml
in un editor di testo per modificarlo.In
services.yaml
, vai all'attributoapplications
:version: v1beta1 env: - name: KEY1 ... applications: ...
Rimuovi il servizio che ti interessa, iniziando dal campo
name
, seguito dagli altri campi obbligatori e facoltativi appropriati alla tua applicazione. Ad esempio:Prima della rimozione del servizio:
version: v1beta1 env: - name: KEY1 ... applications: - name: type: start: - cmd: - name: ...
Dopo la rimozione del servizio:
version: v1beta1 env: - name: KEY1 ... applications: - name: ...
Salva il file
services.yaml
.