Müssen System-Unit-Dateien beim Ändern neu geladen werden?

138

Nehmen wir an, ich schreibe eine mine.serviceDatei. Dann benutze ich systemctl enable mine.service.

Wenn ich mich später für eine Bearbeitung entscheide mine.service, muss ich dann mitteilen, systemddass dies mine.servicegeändert wurde? Wenn ja, wie mache ich das?

425nesp
quelle

Antworten:

169

Nachdem Sie Änderungen an Ihrer Unit-Datei vorgenommen haben, sollten Sie systemctl daemon-reloadwie hier beschrieben ausführen .

daemon-reload
Lädt die Systemd Manager-Konfiguration neu. Dadurch werden alle Generatoren erneut ausgeführt (siehe systemd.generator (7) ), alle Einheitendateien neu geladen und der gesamte Abhängigkeitsbaum neu erstellt. Während der Daemon neu geladen wird, bleiben alle Sockets, die systemd im Auftrag der Benutzerkonfiguration abhört, zugänglich.

Sie können dann Ihren Dienst neu starten (oder neu laden), wie Sie möchten

systemctl restart your-service-name

(daemon-reload lädt die Dienste selbst nicht neu / startet sie nicht neu, macht systemd nur auf die neue Konfiguration aufmerksam)

GregL
quelle
2
Ich stellte fest, dass ich auch ein ausführen musste systemctl restart, um den Dienst selbst neu zu starten ...
hwjp
3
Nur für den Fall, daemon-reloadist nicht universell, muss systemctl --user daemon-reloadfür Benutzerdienste ausgeführt werden.
Olegs Jeremejevs
Hinweis: "Löschen Sie auch die von Generatoren erstellte vorherige Konfiguration, bevor Sie sie erneut ausführen: freedesktop.org/software/systemd/man/systemd.generator.html
rogerdpack
8

Als Ergänzung zur obigen Antwort: Falls Sie etwas in der [Install]Direktive geändert haben , müssen Sie möglicherweise sudo systemctl reenable YOURUNITFILEausführen, um die Symlinks in den .target-Verzeichnissen neu zu erstellen.

HomelessGamer
quelle
Das hat den Trick für mich getan! Ich habe nicht verstanden, warum systemctl die Servicedatei nicht neu geladen hat.
Antonagestam