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 coppia name/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 coppia name/value. In alternativa, utilizza envfile 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 da env 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 da start senza effettuare il forking. È previsto il fork dell'eseguibile del servizio. Ti consigliamo di impostare anche pidfile.

      • exec: esegui un fork per eseguire il servizio. Il servizio viene considerato avviato dopo che exec è stato chiamato sull'eseguibile.

      • simple: uguale a exec. Un servizio simple si comporta in modo diverso dalla definizione di systemd perché attende sia fork che exec anziché fork.

      • notify: uguale a exec, tranne per il fatto che per systemd la variabile di ambiente NOTIFY_SOCKET non è impostata, quindi le chiamate sd_notify systemd non funzionano.

      • oneshot: il servizio viene considerato avviato dopo la chiamata di exec sull'eseguibile. Se il servizio viene chiuso con un codice di errore diverso da 0, lo stato è error.

    • I comandi prestart, start, poststart e status per il servizio.

      Per avviare un servizio, Migrate to Containers esegue gli eventuali comandi prestart, poi il comando start e infine gli eventuali comandi poststart. Se un comando non va a buon fine e non hai configurato il comando per l'utilizzo di ignore_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 o status.

        Per start, puoi avere un solo comando, a meno che type non sia oneshot.

        Se type=forking o type=oneshot, i comandi poststart vengono eseguiti dopo i fork di comandi start. In caso contrario, vengono eseguite immediatamente dopo l'esecuzione del comando start.

      • 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 impostare shell su /bin/bash.

      • ignore_errors (facoltativo): se true, 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 su true per qualsiasi eseguibile systemd che includa il prefisso "-".

      • ignore_environment_variables (Facoltativo) Se true, la sostituzione variabile di ambiente non viene applicata. Il valore predefinito è false.

        Per impostazione predefinita, Migrate to Containers imposta ignore_environment_variables su true per qualsiasi eseguibile systemd 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 di paths per le directory create in /run/.

      • state_directories: specifica l'elenco di paths per le directory create in /var/lib/.

      • cache_directories: specifica l'elenco di paths per le directory create in /var/cache/.

      • logs_directories: specifica l'elenco di paths per le directory create in /var/log/.

      • configuration_directories: specifica l'elenco di paths 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: se false 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:

  1. Apri il file services.yaml in un editor di testo per modificarlo.

  2. In services.yaml, vai all'attributo applications:

    version: v1beta1
    env:
     - name: KEY1
     ...
    applications:
    
  3. Aggiungi il servizio che preferisci nella riga sotto l'attributo applications iniziando con il campo name, 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'attributo applications, puoi aggiungere un nuovo servizio iniziando con il campo name nella riga sotto l'ultima voce del servizio precedente:

    version: v1beta1
    env:
     - name: KEY1
     ...
    applications:
    - name:
      type:
      start:
    - name:
      type:
      start:
        ...
    
  4. Salva il file services.yaml.

Rimuovere un servizio

Per rimuovere un servizio dal file services.yaml, procedi nel seguente modo:

  1. Apri il file services.yaml in un editor di testo per modificarlo.

  2. In services.yaml, vai all'attributo applications:

    version: v1beta1
    env:
     - name: KEY1
     ...
    applications:
    ...
    
  3. 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:
      ...
    
  4. Salva il file services.yaml.