Utilizzo di services-config.yaml
Quando utilizzi il gestore dei servizi Linux semplificato per eseguire una migrazione, Migrate to Containers crea un nuovo file dell'artefatto, 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 container, modifica il file services-config.yaml
per controllare
l'inizializzazione dell'applicazione in:
- Rimuovere le applicazioni dal file
- Aggiungi applicazioni al file
- Modifica 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, numeri e il 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 modulo:# Comments allowed KEY=VALUE
Se il file di testo contiene una definizione di variabile di ambiente che duplica una specificata da
env
, quella specificata daenv
ha la precedenza.
applications
: specifica l'elenco di applicazioni da avviare quando esegui il deployment del container 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 effettuare il forking. È previsto il fork dell'eseguibile del servizio. Ti consigliamo di impostare anchepidfile
.exec
: esegui un fork per eseguire il servizio. Il servizio viene considerato avviato dopo cheexec
è stato chiamato sull'eseguibile.simple
: uguale aexec
. Un serviziosimple
si comporta in modo diverso dalla definizione disystemd
perché attende siafork
cheexec
anzichéfork
.notify
: uguale aexec
, 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 diexec
sull'eseguibile. Se il servizio viene chiuso con un codice di errore diverso da 0, lo stato èerror
.
I comandi
prestart
,start
,poststart
estatus
per il servizio.Per avviare un servizio, Migrate to Containers esegue gli eventuali comandi
prestart
, poi il comandostart
e infine gli eventuali comandipoststart
. Se un comando non va a buon fine e non hai configurato il comando per l'utilizzo diignore_errors
, il servizio viene arrestato 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 solo comando, a meno chetype
non siaoneshot
.Se
type=forking
otype=oneshot
, i comandipoststart
vengono eseguiti dopo i fork di comandistart
. In caso contrario, vengono eseguite 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, che normalmente viene considerato un errore, ma il comando viene considerato riuscito. Il valore predefinito èfalse
.Per impostazione predefinita, Migrate to Containers imposta
ignore_errors
sutrue
per qualsiasi eseguibilesystemd
che includa 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 eseguibilesystemd
che include il prefisso ":".
pidfile
: specifica il file PID contenente l'ID processo del servizio, che viene 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 avviata la nuova procedura.group
: specifica il nome del gruppo con cui viene avviata la nuova procedura.timers
: specifica l'elenco dei timer dell'applicazione. L'applicazione verrà attivata ogni volta che scadrà 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 di calendario per il timer.cron
: un'ora specificata utilizzando il formato cron. Ad esempio:cron: 0 0 * * * cron: @daily
on_startup
: specifica un elenco di durate (relative al momento del deployment del container).duration
: un'ora specificata utilizzando il formato di durata. Ad esempio:
duration: 30m duration: 1sec
on_service_start
: specifica un elenco di durate relative al momento in cui lo stato della tua applicazione passa a attivo.duration
: un'ora specificata utilizzando il formato di durata.
on_service_stop
: specifica un elenco di durate relative al momento in cui lo stato dell'applicazione diventa non attiva.duration
: un'ora specificata utilizzando il formato di durata.
Utilizza le seguenti proprietà per specificare
paths
per le directory create prima di avviare il servizio:runtime_directories
: specifica l'elenco dipaths
per le directory create in/run/
.state_directories
: specifica l'elenco dipaths
per le directory create in/var/lib/
.cache_directories
: specifica l'elenco dipaths
per le directory create in/var/cache/
.logs_directories
: specifica l'elenco dipaths
per le directory create in/var/log/
.configuration_directories
: specifica l'elenco dipaths
per le directory create in/etc/
.
Ognuna di queste proprietà accetta le seguenti opzioni:
mode
: specifica la modalità file. Il valore predefinito è 0755, che corrisponde all'accesso in lettura ed esecuzione per tutti e all'accesso in scrittura per il proprietario.preserve
: sefalse
viene ripulita la directory all'arresto del servizio. Il valore predefinito ètrue
.
Aggiungi o rimuovi un servizio al 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 di un servizio, consulta la definizione di services.yaml
riportata sopra.
Aggiungi un servizio.
Per aggiungere un servizio al file services.yaml
, procedi nel seguente modo:
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 che preferisci nella riga sotto l'attributo
applications
iniziando con il camponame
, seguito dagli altri campi obbligatori e facoltativi appropriati per la tua applicazione:version: v1beta1 env: - name: KEY1 ... applications: - name: type: start: - cmd: ...
Se il file
services.yaml
contiene già delle definizioni di servizio nell'attributoapplications
, puoi aggiungere un nuovo servizio iniziando con il camponame
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
, procedi nel seguente modo:
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 desiderato iniziando con il campo
name
, seguito dagli altri campi obbligatori e facoltativi appropriati alla tua applicazione. Ad esempio:Prima che il servizio venga rimosso:
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
.