web-dev-qa-db-fra.com

Redémarrez le service Systemd automatiquement chaque fois qu'un répertoire est modifié (tout fichier qu'il contient)

Comment redémarrer un service Systemd lorsqu'un fichier est modifié. J'ai un service Java que je veux recharger quand un fichier JAR est modifié.

Ceci est ma configuration:

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/

J'ai aussi essayé d'utiliser PathChanged et d'utiliser un fichier à la place d'un répertoire.

Quand j'ai installé le service, j'ai exécuté: Sudo systemctl daemon-reload et Sudo systemctl enable srv

Merci!

19
jamming

Le commentaire de Michal Politowski est tout à fait correct. J'utilise cette méthode pour redémarrer automatiquement les services lorsque de nouveaux artefacts sont déployés. C'est très utile.

Pour être clair, vous avez besoin de:

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
16
John