Viele Sysv-Init-Skripte verwendeten eine entsprechende Datei in /etc/default
, damit der Administrator sie konfigurieren konnte. Startaufträge können mithilfe von .override
Dateien geändert werden . Wie kann ich systemd-Einheiten überschreiben oder konfigurieren, jetzt wo systemd der Standard in Ubuntu ist?
109
ExecStart=
mit einem leeren Eintrag versehenen Eintrags keinen Kommentar hinterlassen können, der wieExecStart= # Empty line to clear previous entries.
folgt lautet: Dies wird als ein andererExecStart=
Eintrag übernommen und der Liste hinzugefügt. PS. Ich konnte murus Antwort wegen meines schlechten Rufs nicht kommentieren.Antworten:
systemd
Einheiten müssen Dateien in nicht befolgen/etc/default
.systemd
ist leicht konfigurierbar, setzt jedoch voraus, dass Sie die Syntax der systemd-Unit-Dateien kennen.Pakete versenden Einheitendateien normalerweise in
/lib/systemd/system/
. Diese dürfen nicht bearbeitet werden.systemd
Ermöglicht Ihnen stattdessen, diese Dateien zu überschreiben, indem Sie entsprechende Dateien in erstellen/etc/systemd/system/
.Für einen bestimmten Service
foo
würde das Paket bieten/lib/systemd/system/foo.service
. Sie können den Status mit überprüfensystemctl status foo
oder die Protokolle mit anzeigenjournalctl -u foo
. Um etwas in der Definition von zu überschreibenfoo
, mache:Dadurch wird ein Verzeichnis erstellt,
/etc/systemd/system
das nach dem Gerät benannt ist, und eineoverride.conf
Datei in diesem Verzeichnis (/etc/systemd/system/foo.service.d/override.conf
). Mit dieser Datei (oder anderen.conf
Dateien in/etc/systemd/system/foo.service.d/
) können Sie Einstellungen hinzufügen oder überschreiben .Befehlsargumente überschreiben
Nehmen Sie
getty
zum Beispiel den Service. Angenommen, ich möchte, dass mein Benutzer TTY2 automatisch anmeldet (dies ist nicht ratsam, sondern nur ein Beispiel). TTY2 wird vomgetty@tty2
Dienst ausgeführt (tty2
wobei es sich um eine Instanz der Vorlage handelt/lib/systemd/system/getty@service
). Dazu muss ich dengetty@tty2
Dienst anpassen .Insbesondere muss ich die
ExecStart
Zeile ändern , die derzeit ist:Um dies zu überschreiben, gehen Sie wie folgt vor:
Und füge hinzu:
Beachten Sie, dass:
ExecStart
bevor sie wieder einstellen, da es eine additive Einstellung ist ähnlichAfter
,Environment
(als Ganze, nicht pro-Variable) undEnvironmentFile
, und im Gegensatz zu überschreiben Einstellungen , wieRestartSec
oderType
.ExecStart
kann nur fürType=oneshot
Dienste mehrere Einträge enthalten .ExecStart
in der[Service]
Sektion, so muss mein Override auchExecStart
in der[Service]
Sektion stehen. Wenn Sie sich die eigentliche Servicedatei mit ansehen,systemctl cat
erfahren Sie oft, was Sie überschreiben müssen und in welchem Bereich sie sich befindet.Wenn Sie eine systemd-Unit-Datei bearbeiten, müssen Sie normalerweise Folgendes ausführen, damit sie wirksam wird:
systemctl edit
Tut dies jedoch automatisch für Sie.Jetzt:
Und wenn doch:
und drücken Sie CtrlAltF2, presto! Ich werde auf diesem TTY in meinem Konto angemeldet sein.
Wie ich schon sagte,
getty@tty2
ist eine Instanz einer Vorlage. Was ist, wenn ich alle Instanzen dieser Vorlage überschreiben möchte? Dies kann durch Bearbeiten der Vorlage selbst geschehen (Entfernen der Instanzkennung - in diesem Falltty2
):Die Umgebung überschreiben
Ein häufiger Anwendungsfall für
/etc/default
Dateien ist das Festlegen von Umgebungsvariablen. In der Regel/etc/default
handelt es sich um ein Shell-Skript, sodass Sie darin Shell-Sprachkonstrukte verwenden können. Beisystemd
ist dies jedoch nicht der Fall. Sie können Umgebungsvariablen auf zwei Arten angeben:Über eine Datei
Angenommen, Sie haben die Umgebungsvariablen in einer Datei festgelegt:
Dann können Sie die Außerkraftsetzung hinzufügen:
Insbesondere wenn Ihre
/etc/default/grub
nur Zuweisungen und keine Shell-Syntax enthält, können Sie sie als die verwendenEnvironmentFile
.Über
Environment
EinträgeDas oben Genannte kann auch mithilfe der folgenden Außerkraftsetzung erreicht werden:
Dies kann jedoch bei mehreren Variablen, Leerzeichen usw. schwierig werden. Schauen Sie sich eine meiner anderen Antworten an, um ein Beispiel für eine solche Instanz zu erhalten.
Weitere Lektüre
Über diesen Mechanismus ist es sehr einfach,
systemd
Einheiten zu überschreiben und solche Änderungen rückgängig zu machen (indem einfach die Überschreibungsdatei entfernt wird). Dies sind nicht die einzigen Einstellungen, die geändert werden können.Die folgenden Links wären nützlich:
systemd
systemd
Hilfeseiten , insbesondere die Hilfeseiten vonsystemd.unit
undsystemd.service
quelle
systemd.service(5)
Manpage, Abschnitt überExecStart
: "Wenn Type = oneshot ist, muss genau ein Befehl angegeben werden. Wenn Type = oneshot verwendet wird, können null oder mehr Befehle angegeben werden. Befehle können angegeben werden, indem mehrere Befehlszeilen in derselben Zeile angegeben werden Direktive oder alternativ kann diese Direktive mehrmals mit dem gleichen Effekt angegeben werden. Wenn die leere Zeichenfolge dieser Option zugewiesen wird, wird die Liste der zu startenden Befehle zurückgesetzt, vorherige Zuweisungen dieser Option haben keine Wirkung. "sudo rm
die Überschreibungsdatei und dannsystemctl daemon-reload
, oder Sie könnensystemctl edit
und ersetzen alles in der Überschreibungsdatei mit Kommentaren. Kommentare in Servicedateien beginnen mit#
.systemctl revert foo