services-config.yaml verwenden

Wenn Sie den vereinfachten Linux-Dienstmanager für die Migration verwenden, wird durch Migrate for Containers die neue Artefaktdatei services-config.yaml erstellt. Mit dieser Datei können Sie die Anwendungsinitialisierung für einen bereitgestellten Container steuern.

Bearbeiten Sie beispielsweise nach der Migration des Containers die Datei services-config.yaml, um die Anwendungsinitialisierung zu steuern:

  • Anwendungen aus der Datei entfernen
  • Anwendungen zur Datei hinzufügen
  • Initialisierungsattribute einer Anwendung bearbeiten

Hier sehen Sie eine Beispieldatei für 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 dieser Datei gilt:

  • env: Gibt Umgebungsvariablen auf globaler oder Anwendungsebene an. Wenn Sie auf der globalen und Anwendungsebene dieselbe Umgebungsvariable angeben, hat die Umgebungsvariable auf Anwendungsebene Vorrang.

    • Verwenden Sie für Umgebungsvariablen, die auf globaler Ebene festgelegt werden, env zum Angeben eines name/value-Paars. Namen können ASCII-Buchstaben, Ziffern und Unterstriche enthalten. Namen dürfen nicht mit einer Ziffer beginnen.

    • Verwenden Sie für auf Anwendungsebene festgelegte Umgebungsvariablen env, um ein name/value-Paar anzugeben. Oder verwenden Sie envfile, um den Pfad zu einer Textdatei anzugeben, die Zeilen im Formular enthält:

      # Comments allowed
      KEY=VALUE

      Wenn die Textdatei eine Definition einer Umgebungsvariablen enthält, die eine mit env angegebene dupliziert, hat die durch env angegebene Vorrang.

  • applications: Gibt die Liste der Anwendungen an, die beim Bereitstellen des Containers gestartet werden sollen, und legt die Initialisierungsattribute der Anwendung fest.

    • name: Gibt den Namen der Anwendung an.

    • type: Gibt den Typ der Anwendung als eine der folgenden Optionen an:

      • forking: Führen Sie die durch start angegebene Datei ohne Fork aus. Für die ausführbare Datei des Dienstes wird ein Fork erwartet. Wir empfehlen auch die Festlegung von pidfile.

      • exec: Fork zum Ausführen des Dienstes Der Dienst gilt als gestartet, nachdem exec in der ausführbaren Datei aufgerufen wurde.

      • simple gleich wie exec. Ein simple-Dienst verhält sich anders als die Definition systemd, da er sowohl auf fork als auch auf exec anstatt auf fork wartet.

      • notify: Entspricht exec, außer dass für systemd die Umgebungsvariable NOTIFY_SOCKET nicht festgelegt ist, sodass Aufrufe von sd_notify systemd nicht funktionieren.

      • oneshot: Der Dienst gilt als gestartet, nachdem exec in der ausführbaren Datei aufgerufen wurde. Der Status ist error, wenn der Dienst mit einem Fehlercode ungleich 0 beendet wird.

    • prestart-, start-, poststart- und status-Befehle für den Dienst.

      Zum Starten eines Dienstes führt Migrate to Containers die Befehle prestart (falls vorhanden), den Befehl start und schließlich die Befehle poststart (falls vorhanden) aus. Wenn ein Befehl fehlschlägt und Sie den Befehl nicht für die Verwendung von ignore_errors konfiguriert haben, wird der Dienst angehalten und im Status des Dienstes wird eine Fehlermeldung angezeigt.

      Die Befehle für bestimmte Vorgänge in der Anwendung haben folgendes Format:

        command-type: 
          cmd: command
          shell: /bin/sh
          ignore_errors: false
          ignore_environment_variables: false

      Wobei:

      • command-type: Gibt den Befehlstyp als prestart, start, poststart oder status an.

        Für start können Sie einen einzelnen Befehl verwenden, es sei denn, der type ist oneshot.

        Bei type=forking oder type=oneshot werden die poststart-Befehle ausgeführt, nachdem der start-Befehl verzweigt wurde. Andernfalls werden sie sofort nach Ausführung des Befehls start ausgeführt.

      • command: Gibt den Befehl an, der zum Ausführen des Vorgangs ausgeführt werden soll.

      • shell (Optional): Standardmäßig werden alle Befehle in der /bin/sh-Shell ausgeführt. Optional können Sie für shell den Wert /bin/bash festlegen.

      • ignore_errors (Optional): Wenn true, wird ein Exit-Code aus dem Befehl, der normalerweise als Fehler betrachtet wird, aufgezeichnet, aber der Befehl wird als erfolgreich betrachtet. Der Standardwert ist false.

        Standardmäßig legt Migrate to Containers ignore_errors für jede ausführbare systemd-Datei auf true fest, die das Präfix „-” enthält.

      • ignore_environment_variables (Optional): Bei true wird die Substitution der Umgebungsvariablen nicht angewendet. Der Standardwert ist false.

        Standardmäßig setzt Migrate to Container ignore_environment_variables für jede ausführbare systemd-Datei, die das Präfix „:” enthält, auf true.

    • pidfile: Gibt die PID-Datei an, die die Prozess-ID des Dienstes enthält, mit dem geprüft wird, ob der Prozess noch ausgeführt wird.

    • chdir: Gibt das Arbeitsverzeichnis des gestarteten Prozesses an.

    • user: Gibt den Nutzernamen an, unter dem der neue Prozess gestartet wird.

    • group: Gibt den Gruppennamen an, unter dem der neue Prozess gestartet wird.

    • timers: Gibt die Liste der Timer der Anwendung an. Die Anwendung wird aktiviert, wenn einer der angegebenen Timer abläuft.

      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: Gibt den Namen des Timers an.

      • on_calendar: Gibt die Liste der Kalenderereignisse für den Timer an.

        • cron: Eine angegebene Zeit im Cron-Format. Beispiel:

          cron: 0 0 * * *
          cron: @daily
          
      • on_startup: Gibt eine Liste der Dauer in Bezug auf den Zeitpunkt der Bereitstellung des Containers an.

        • duration: Eine angegebene Zeit im Format für die Dauer. Beispiel:
        duration: 30m
        duration: 1sec
        
      • on_service_start: Gibt eine Liste der Dauer relativ zum Status Ihrer Anwendung in "Aktiv" an.

        • duration: Eine angegebene Zeit im Format für die Dauer.
      • on_service_stop: Gibt eine Liste der Dauer an, die sich darauf bezieht, wann der Status Ihrer Anwendung auf inaktiv wechselt.

        • duration: Eine angegebene Zeit im Format für die Dauer.
    • Verwenden Sie die folgenden Attribute, um paths für Verzeichnisse anzugeben, die vor dem Start des Dienstes erstellt werden:

      • runtime_directories: Gibt die Liste der paths für Verzeichnisse an, die in /run/ erstellt wurden.

      • state_directories: Gibt die Liste der paths für Verzeichnisse an, die in /var/lib/ erstellt wurden.

      • cache_directories: Gibt die Liste der paths für Verzeichnisse an, die in /var/cache/ erstellt wurden.

      • logs_directories: Gibt die Liste der paths für Verzeichnisse an, die in /var/log/ erstellt wurden.

      • configuration_directories: Gibt die Liste der paths für Verzeichnisse an, die in /etc/ erstellt wurden.

      Für jedes dieser Attribute bestehen folgende Optionen:

      • mode: Gibt den Dateimodus an. Der Standardwert ist 0755, der dem Lese- und Schreibzugriff für alle Nutzer und dem Schreibzugriff für den Inhaber entspricht.
      • preserve: Bei false wird das Verzeichnis bereinigt, wenn der Dienst beendet wird. Der Standardwert ist true.

Dienst zur Datei „services.yaml“ hinzufügen oder daraus entfernen

Sie können einen Dienst zur Datei services.yaml hinzufügen oder daraus entfernen, indem Sie ihn manuell bearbeiten. Wenn Sie einen neuen Dienst hinzufügen, müssen Sie die folgenden Felder ausfüllen:

  • name
  • type
  • start

Weitere Informationen zu den Pflichtfeldern und optionalen Feldern für einen Dienst finden Sie in der obigen Definition für services.yaml.

Dienst hinzufügen

So fügen Sie Ihrer Datei services.yaml einen Dienst hinzu:

  1. Öffnen Sie die Datei services.yaml zur Bearbeitung in einem Texteditor.

  2. Rufen Sie in services.yaml das Attribut applications auf:

    version: v1beta1
    env:
     - name: KEY1
     ...
    applications:
    
  3. Fügen Sie den gewünschten Dienst in der Zeile unter dem Attribut applications ein, beginnend mit dem Feld name, gefolgt von den anderen erforderlichen und optionalen Feldern, die für Ihre Anwendung geeignet sind:

    version: v1beta1
    env:
     - name: KEY1
     ...
    applications:
    - name:
      type:
      start:
        - cmd:
      ...
    

    Wenn die Datei services.yaml bereits Dienstdefinitionen unter dem Attribut applications hat, können Sie einen neuen Dienst hinzufügen, der mit dem Feld name in der Zeile unter dem letzten Eintrag des vorherigen Dienstes beginnt:

    version: v1beta1
    env:
     - name: KEY1
     ...
    applications:
    - name:
      type:
      start:
    - name:
      type:
      start:
        ...
    
  4. Speichern Sie die Datei services.yaml.

Dienst entfernen

So entfernen Sie einen Dienst aus der Datei services.yaml:

  1. Öffnen Sie die Datei services.yaml zur Bearbeitung in einem Texteditor.

  2. Rufen Sie in services.yaml das Attribut applications auf:

    version: v1beta1
    env:
     - name: KEY1
     ...
    applications:
    ...
    
  3. Entfernen Sie den gewünschten Dienst mit dem Feld name, gefolgt von den anderen erforderlichen und optionalen Feldern, die für Ihre Anwendung geeignet sind. Beispiel:

    Bevor Sie den Dienst entfernen:

    version: v1beta1
    env:
    - name: KEY1
      ...
    applications:
    - name:
      type:
      start:
        - cmd:
    - name:
      ...
    
    

    Nachdem der Dienst entfernt wurde:

    version: v1beta1
    env:
    - name: KEY1
      ...
    applications:
    - name:
      ...
    
  4. Speichern Sie die Datei services.yaml.