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,
envzum Angeben einesname/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 einname/value-Paar anzugeben. Oder verwenden Sieenvfile, 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
envangegebene dupliziert, hat die durchenvangegebene 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 durchstartangegebene Datei ohne Fork aus. Für die ausführbare Datei des Dienstes wird ein Fork erwartet. Wir empfehlen auch die Festlegung vonpidfile.exec: Fork zum Ausführen des Dienstes Der Dienst gilt als gestartet, nachdemexecin der ausführbaren Datei aufgerufen wurde.simplegleich wieexec. Einsimple-Dienst verhält sich anders als die Definitionsystemd, da er sowohl aufforkals auch aufexecanstatt aufforkwartet.notify: Entsprichtexec, außer dass fürsystemddie UmgebungsvariableNOTIFY_SOCKETnicht festgelegt ist, sodass Aufrufe vonsd_notify systemdnicht funktionieren.oneshot: Der Dienst gilt als gestartet, nachdemexecin der ausführbaren Datei aufgerufen wurde. Der Status isterror, wenn der Dienst mit einem Fehlercode ungleich 0 beendet wird.
prestart-,start-,poststart- undstatus-Befehle für den Dienst.Zum Starten eines Dienstes führt Migrate to Containers die Befehle
prestart(falls vorhanden), den Befehlstartund schließlich die Befehlepoststart(falls vorhanden) aus. Wenn ein Befehl fehlschlägt und Sie den Befehl nicht für die Verwendung vonignore_errorskonfiguriert 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,poststartoderstatusan.Für
startkönnen Sie einen einzelnen Befehl verwenden, es sei denn, dertypeistoneshot.Bei
type=forkingodertype=oneshotwerden diepoststart-Befehle ausgeführt, nachdem derstart-Befehl verzweigt wurde. Andernfalls werden sie sofort nach Ausführung des Befehlsstartausgefü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ürshellden Wert/bin/bashfestlegen.ignore_errors(Optional): Wenntrue, wird ein Exit-Code aus dem Befehl, der normalerweise als Fehler betrachtet wird, aufgezeichnet, aber der Befehl wird als erfolgreich betrachtet. Der Standardwert istfalse.Standardmäßig legt Migrate to Containers
ignore_errorsfür jede ausführbaresystemd-Datei auftruefest, die das Präfix „-” enthält.ignore_environment_variables(Optional): Beitruewird die Substitution der Umgebungsvariablen nicht angewendet. Der Standardwert istfalse.Standardmäßig setzt Migrate to Container
ignore_environment_variablesfür jede ausführbaresystemd-Datei, die das Präfix „:” enthält, auftrue.
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_timename: 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: 1secon_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
pathsfür Verzeichnisse anzugeben, die vor dem Start des Dienstes erstellt werden:runtime_directories: Gibt die Liste derpathsfür Verzeichnisse an, die in/run/erstellt wurden.state_directories: Gibt die Liste derpathsfür Verzeichnisse an, die in/var/lib/erstellt wurden.cache_directories: Gibt die Liste derpathsfür Verzeichnisse an, die in/var/cache/erstellt wurden.logs_directories: Gibt die Liste derpathsfür Verzeichnisse an, die in/var/log/erstellt wurden.configuration_directories: Gibt die Liste derpathsfü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: Beifalsewird das Verzeichnis bereinigt, wenn der Dienst beendet wird. Der Standardwert isttrue.
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:
nametypestart
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:
Öffnen Sie die Datei
services.yamlzur Bearbeitung in einem Texteditor.Rufen Sie in
services.yamldas Attributapplicationsauf:version: v1beta1 env: - name: KEY1 ... applications:Fügen Sie den gewünschten Dienst in der Zeile unter dem Attribut
applicationsein, beginnend mit dem Feldname, 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.yamlbereits Dienstdefinitionen unter dem Attributapplicationshat, können Sie einen neuen Dienst hinzufügen, der mit dem Feldnamein der Zeile unter dem letzten Eintrag des vorherigen Dienstes beginnt:version: v1beta1 env: - name: KEY1 ... applications: - name: type: start: - name: type: start: ...Speichern Sie die Datei
services.yaml.
Dienst entfernen
So entfernen Sie einen Dienst aus der Datei services.yaml:
Öffnen Sie die Datei
services.yamlzur Bearbeitung in einem Texteditor.Rufen Sie in
services.yamldas Attributapplicationsauf:version: v1beta1 env: - name: KEY1 ... applications: ...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: ...Speichern Sie die Datei
services.yaml.