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 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
env
angegebene dupliziert, hat die durchenv
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 durchstart
angegebene 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, nachdemexec
in der ausführbaren Datei aufgerufen wurde.simple
gleich wieexec
. Einsimple
-Dienst verhält sich anders als die Definitionsystemd
, da er sowohl auffork
als auch aufexec
anstatt auffork
wartet.notify
: Entsprichtexec
, außer dass fürsystemd
die UmgebungsvariableNOTIFY_SOCKET
nicht festgelegt ist, sodass Aufrufe vonsd_notify systemd
nicht funktionieren.oneshot
: Der Dienst gilt als gestartet, nachdemexec
in 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 Befehlstart
und schließlich die Befehlepoststart
(falls vorhanden) aus. Wenn ein Befehl fehlschlägt und Sie den Befehl nicht für die Verwendung vonignore_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
oderstatus
an.Für
start
können Sie einen einzelnen Befehl verwenden, es sei denn, dertype
istoneshot
.Bei
type=forking
odertype=oneshot
werden diepoststart
-Befehle ausgeführt, nachdem derstart
-Befehl verzweigt wurde. Andernfalls werden sie sofort nach Ausführung des Befehlsstart
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ürshell
den Wert/bin/bash
festlegen.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_errors
für jede ausführbaresystemd
-Datei auftrue
fest, die das Präfix „-” enthält.ignore_environment_variables
(Optional): Beitrue
wird die Substitution der Umgebungsvariablen nicht angewendet. Der Standardwert istfalse
.Standardmäßig setzt Migrate to Container
ignore_environment_variables
fü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_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 derpaths
für Verzeichnisse an, die in/run/
erstellt wurden.state_directories
: Gibt die Liste derpaths
für Verzeichnisse an, die in/var/lib/
erstellt wurden.cache_directories
: Gibt die Liste derpaths
für Verzeichnisse an, die in/var/cache/
erstellt wurden.logs_directories
: Gibt die Liste derpaths
für Verzeichnisse an, die in/var/log/
erstellt wurden.configuration_directories
: Gibt die Liste derpaths
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
: Beifalse
wird 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:
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:
Öffnen Sie die Datei
services.yaml
zur Bearbeitung in einem Texteditor.Rufen Sie in
services.yaml
das Attributapplications
auf:version: v1beta1 env: - name: KEY1 ... applications:
Fügen Sie den gewünschten Dienst in der Zeile unter dem Attribut
applications
ein, 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.yaml
bereits Dienstdefinitionen unter dem Attributapplications
hat, können Sie einen neuen Dienst hinzufügen, der mit dem Feldname
in 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.yaml
zur Bearbeitung in einem Texteditor.Rufen Sie in
services.yaml
das Attributapplications
auf: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
.