Riavvia il servizio Systemd automaticamente ogni volta che cambia una directory (qualsiasi file al suo interno)


25

Come riavviare un servizio Systemd quando si modifica un file. Ho un servizio Java che voglio ricaricare quando cambia qualsiasi file jar.

Questa è la mia configurazione:

srv.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/

Ho anche provato a utilizzare PathChangede utilizzare un file anziché una directory.

Quando ho installato il servizio ho eseguito: sudo systemctl daemon-reloade sudo systemctl enable srv

Grazie!


2
Non testato quindi non una risposta, ma dalla documentazione sembra che le pathunità siano utili solo per attivare (avviare) altre unità. Qui probabilmente potresti creare srv-restart.pathcon PathChanged=/opt/srv/lib/e srv-restart.servicecon ExecStart=systemctl restart srv.service.
Michał Politowski,

Sembra che se lo chiami allo stesso modo del servizio (con .path) il file path si riferisce allo stesso servizio: freedesktop.org/software/systemd/man/systemd.path.html comunque ... Non lo so se avvia solo un servizio o lo riavvia anche se è già in esecuzione
inceppamento il

A quanto ho capito dai documenti, srv.pathposso fare solo l'equivalente di systemclt start srv.service, quindi per l'automazione dei riavvii avrai bisogno di un altro servizio, che quando avviato riavvia il tuo servizio.
Michał Politowski,

Devi avviarlo systemctl start srv.path- e averlo avviato all'avviosystemctl preset srv.path
Michael D.

Risposte:


22

Il commento di Michal Politowski è esattamente corretto. Uso questo metodo per riavviare automaticamente i servizi quando vengono distribuiti nuovi artefatti. È molto utile.

Per essere chiari, hai bisogno di:

srv.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-watcher.service

[Unit]
Description=srv restarter
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl restart srv.service

[Install]
WantedBy=multi-user.target

SRV-watcher.path

[Path]
PathModified=/opt/srv/lib

[Install]
WantedBy=multi-user.target

6
Ci sono garanzie su quando questo viene attivato se molti file vengono cambiati in rapida successione?
Rich Remer,

3
È importante ricordare che anche l'unità «.path» deve essere abilitata. In questo caso:systemctl enable srv-watcher.path && systemctl start srv-watcher.path
Pau Ruŀlan Ferragut,

1
Se il servizio di riavvio non ha lo stesso nome del .path file, è sufficiente aggiungerlo Unit=nameofmyrestart.servicealla [Path]sezione del .pathfile. freedesktop.org/software/systemd/man/systemd.path.html#Unit=
DKebler

Funziona bene in CentOS per riavviare Kestrel (ASP.NET Core)
Suleman
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.