Utilizzo di services-config.yaml
Quando utilizzi il gestore dei servizi Linux semplificato per eseguire una migrazione, Migrazione a contenitori
crea un nuovo file di elementi services-config.yaml.
Utilizza questo file per controllare l'inizializzazione dell'applicazione in un contenitore 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
envper 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
envper specificare una coppianame/value. In alternativa, utilizzaenvfileper 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.typespecifica il tipo di applicazione, che può essere uno dei seguenti:forking: esegui il file specificato dastartsenza 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 serviziosimplesi comporta in modo diverso rispetto alla definizione disystemdperché attende siaforksiaexecanzichéfork.notify: comeexec, tranne per il fatto che persystemdla variabile di ambienteNOTIFY_SOCKETnon è impostata, quindi le chiamatesd_notify systemdnon funzionano.oneshot: il servizio viene considerato avviato dopo la chiamata aexecnell'eseguibile. Lo stato èerrorse il servizio esce con un codice di errore non uguale a 0.
Comandi
prestart,start,poststartestatusper il servizio.Per avviare un servizio, Migrate to Containers esegue i comandi
prestart(se presenti), poi il comandostarte 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,poststartostatus.Per
start, puoi avere un solo comando, a meno chetypenon siaoneshot.Se
type=forkingotype=oneshot, i comandipoststartvengono 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 impostareshellsu/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_errorssutrueper qualsiasi file eseguibilesystemdche include il prefisso "-".ignore_environment_variables(Facoltativo): setrue, la sostituzione delle variabili di ambiente non viene applicata. Il valore predefinito èfalse.Per impostazione predefinita, Migrate to Containers imposta
ignore_environment_variablessutrueper qualsiasi file eseguibilesystemdche 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_timename: 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: 1secon_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
pathsper le directory create prima dell'avvio del servizio:runtime_directories: specifica l'elenco dipathsalle directory create in/run/.state_directories: specifica l'elenco dipathsalle directory create in/var/lib/.cache_directories: specifica l'elenco dipathsalle directory create in/var/cache/.logs_directories: specifica l'elenco dipathsalle directory create in/var/log/.configuration_directories: specifica l'elenco dipathsalle 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:
nametypestart
Per ulteriori informazioni sui campi obbligatori e facoltativi per un servizio, consulta la definizione di services.yaml riportata sopra.
Aggiungere un servizio
Per aggiungere un servizio al file services.yaml:
Apri il file
services.yamlin 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.yamlcontiene già definizioni di servizi nell'attributoapplications, puoi aggiungere un nuovo servizio iniziando con ilnamecampo 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.yamlin 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.