Ubuntu 26.04 / Dienstkonfiguration mit Validierung und Drop-ins ändern

Ändern Sie die Dienstkonfiguration, indem Sie den ursprünglichen und den aktuellen Zustand aufzeichnen, eine separate Überschreibung einführen, diese validieren und das tatsächliche Verhalten überprüfen. Systemd-Einheiten neu laden, Anwendungskonfigurationen neu laden und einen Prozess neu starten sind unterschiedliche Vorgänge.

Lokalisieren Sie die ursprüngliche Einheit und Drop-Ins.

Identifizieren Sie die tatsächliche Einheit und inspizieren Sie sie mit systemctl cat und systemctl show -p FragmentPath -p DropInPaths. Direkte Änderungen an paketierten Einheiten unter /usr/lib/systemd/system können während Updates ersetzt werden; legen Sie lokale Anpassungen getrennt unter /etc/systemd/system an.

Erstellen Sie einen unabhängigen Labor-Dienst

Dieses dedizierte VM-Labor lässt echte Serveranwendungen unberührt. Wenn ubuntu-course-lab.service existiert, wählen Sie konsequent einen anderen Namen. Noclobber verhindert das Überschreiben der bestehenden Datei; stoppen Sie, wenn die Erstellung fehlschlägt.

(
set -eu
sudo sh -c 'set -C; cat > /etc/systemd/system/ubuntu-course-lab.service' <<'EOF'
[Unit]
Description=Ubuntu course configuration lab

[Service]
Type=oneshot
Environment=LAB_MODE=baseline
ExecStart=/usr/bin/printenv LAB_MODE
EOF
sudo systemd-analyze verify /etc/systemd/system/ubuntu-course-lab.service
sudo systemctl daemon-reload
sudo systemctl start ubuntu-course-lab.service
journalctl -u ubuntu-course-lab.service --since '5 minutes ago' --no-pager
)

Prüfen Sie den ausgegebenen Wert baseline im Journal und ein erfolgreiches Ergebnis. Eine Type=oneshot-Einheit kann nach erfolgreichem Abschluss inaktiv werden; allein Inaktivität ist kein Fehler. Untersuchen Sie auch systemctl show ubuntu-course-lab.service -p Result.

Ändern Sie einen Wert über ein Drop-in.

(
set -eu
sudo mkdir -p /etc/systemd/system/ubuntu-course-lab.service.d
sudo sh -c 'set -C; cat > /etc/systemd/system/ubuntu-course-lab.service.d/10-lab.conf' <<'EOF'
[Service]
Environment=LAB_MODE=changed
EOF
sudo systemd-analyze verify /etc/systemd/system/ubuntu-course-lab.service
sudo systemctl daemon-reload
sudo systemctl start ubuntu-course-lab.service
journalctl -u ubuntu-course-lab.service --since '5 minutes ago' --no-pager
)

Lassen Sie den Original-Wert der Einheit unverändert und überschreiben Sie ihn im Drop-in mit changed. Vergleichen Sie die zusammengeführte Konfiguration und das neue Ausführungsprotokoll. Die Überprüfung der Einheit validiert nicht jede anwendungsspezifische Einstellung, Dateizugriff oder Netzwerkreaktion.

Unterscheiden Sie drei Neuladungsvorgänge.

Befehl Rolle
systemctl daemon-reload Lädt die systemd-Units und Abhängigkeitsdefinitionen neu
systemctl reload unit Führt den vom Anwendungsprogramm unterstützten Reload-Vorgang aus
systemctl restart unit Stoppt und startet den Prozess

Zum Beispiel kann die Nginx-Konfiguration mit nginx -t vor dem unterstützten Reload validiert werden. Allein das Neuladen von systemd ändert die Umgebung eines vorhandenen Prozesses nicht. Wählen Sie den Anwendungs-Vorgang nach Prüfung von Ausfallzeiten und Tests mit neuen Verbindungen.

Die systemd.unit-Referenz erklärt die Pfade zur Unitsuche und die Priorität von Drop-ins.

Nur diese Änderung rückgängig machen

(
set -eu
sudo rm -- /etc/systemd/system/ubuntu-course-lab.service.d/10-lab.conf
sudo systemctl daemon-reload
sudo systemctl start ubuntu-course-lab.service
journalctl -u ubuntu-course-lab.service --since '5 minutes ago' --no-pager
)

Bestätigen Sie, dass wieder baseline ausgegeben wird. Dieses rm entfernt nur das eigens für die Übung erstellte Drop-in. Vermeiden Sie ein umfassendes systemctl-Revert, das auch Änderungen eines anderen Administrators entfernt. Um die Unit selbst aufzuräumen, überprüfen Sie deren Eigentum und inaktiven Zustand, entfernen Sie nur diese Labor-Datei und laden Sie systemd neu.