Wie starte ich einen Systemd-Dienst neu, wenn sich eine Datei ändert? Ich habe einen Java-Dienst, den ich neu laden möchte, wenn sich eine JAR-Datei ändert.
Das ist mein Setup:
Service
[Unit]
Description=srv 0.1: Service's description
After=network.target
[Service]
Type=simple
WorkingDirectory=/opt/srv
ExecStart=/opt/srv/bin/srv
User=root
Group=root
[Install]
WantedBy=multi-user.target
srv.path
[Path]
PathModified=/opt/srv/lib/
Ich habe auch versucht, PathChanged
eine Datei anstelle eines Verzeichnisses zu verwenden.
Bei der Installation des Dienstes habe ich ausgeführt: sudo systemctl daemon-reload
und sudo systemctl enable srv
Vielen Dank!
path
Einheiten nur zum Aktivieren (Starten) anderer Einheiten nützlich sind. Hier könnte man wohlsrv-restart.path
mitPathChanged=/opt/srv/lib/
undsrv-restart.service
mit erstellenExecStart=systemctl restart srv.service
.srv.path
kann es nur das Äquivalent von tunsystemclt start srv.service
, so dass Sie zum Automatisieren von Neustarts einen anderen Dienst benötigen, der beim Starten Ihren Dienst neu startet.systemctl start srv.path
- und beim Booten starten lassensystemctl preset srv.path
Antworten:
Michal Politowskis Kommentar ist genau richtig. Ich verwende diese Methode, um Dienste automatisch neu zu starten, wenn neue Artefakte bereitgestellt werden. Es ist sehr hilfreich.
Um klar zu sein, brauchen Sie:
Service
srv-watcher.service
srv-watcher.path
quelle
systemctl enable srv-watcher.path && systemctl start srv-watcher.path
.path
Datei hat, fügen Sie ihn einfachUnit=nameofmyrestart.service
dem[Path]
Abschnitt Ihrer.path
Datei hinzu. freedesktop.org/software/systemd/man/systemd.path.html#Unit=