Utilizzo di services-config.yaml
Quando usi il gestore del servizio Linux semplificato per eseguire una migrazione, Migrate to Containers
crea un nuovo file degli artefatti, services-config.yaml
.
Utilizza questo file per controllare l'inizializzazione dell'applicazione su un container di cui è stato eseguito il deployment.
Ad esempio, dopo aver eseguito la migrazione del contenitore, modifica il file services-config.yaml
per controllare
l'inizializzazione dell'applicazione in:
- Rimuovere 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 a livello di applicazione. Se specifichi la stessa variabile di ambiente sia a livello globale che di applicazione, allora 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 un numero.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 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 in uno dei seguenti modi:forking
: esegui il file specificato dastart
senza fork. L'eseguibile del servizio dovrebbe eseguire il fork. Ti consigliamo di impostare anchepidfile
.exec
: crea un 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
: uguale aexec
tranne che persystemd
la variabile di ambienteNOTIFY_SOCKET
non è impostato, quindi le chiamatesd_notify systemd
non funzionano.oneshot
: il servizio viene considerato avviato dopo la chiamata diexec
sull'eseguibile. Lo stato èerror
se il servizio viene chiuso con un codice di errore diverso da 0.
Comandi
prestart
,start
,poststart
estatus
per il servizio.Per avviare un servizio, Migrate to Containers esegue gli eventuali comandi
prestart
, seguito dal comandostart
e infine dagli eventuali comandipoststart
. Se non riesce e non lo hai configurato in modo da utilizzareignore_errors
, il servizio viene interrotto e viene visualizzato un messaggio di errore nello stato del servizio.I comandi utilizzati per eseguire operazioni specifiche sull'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
. Altrimenti, vengono eseguite subito 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 executablesystemd
che includa il prefisso "-".(Facoltativo)
ignore_environment_variables
: 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 con 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 orario specificato 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 che utilizza il formato della durata.
on_service_stop
: specifica un elenco di durate relative a quando lo stato della tua applicazione diventa inattiva.duration
: un'ora specificata che utilizza 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
nelle directory creato in/run/
.state_directories
: specifica l'elenco dipaths
nelle directory creato 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
nelle directory creato 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
: confalse
, la directory viene ripulita all'arresto del servizio. Il valore predefinito ètrue
.
Aggiungere o rimuovere un servizio dal file services.yaml
Puoi aggiungere o rimuovere un servizio dal tuo file services.yaml
manualmente
modificandolo. Ogni volta che aggiungi un nuovo servizio, devi completare quanto segue
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 servizio inapplications
, puoi aggiungere un nuovo servizio che inizia conname
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 con il campo
name
, seguito da gli altri campi obbligatori e facoltativi appropriati per la domanda. 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
.