web-dev-qa-db-ja.com

ディレクトリ(その中のファイル)が変更されるたびにSystemdサービスを自動的に再起動します

ファイルが変更されたときにSystemdサービスを再起動するにはどうすればよいですか。 jarファイルが変更されたときにリロードしたいJavaサービスがあります。

これは私のセットアップです:

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/

また、PathChangedを使用して、ディレクトリの代わりにファイルを使用してみました。

私が実行したサービスをインストールしたとき:Sudo systemctl daemon-reloadおよびSudo systemctl enable srv

ありがとう!

26
jaguililla

Michal Politowskiのコメントは正確です。この方法を使用して、新しいアーティファクトがデプロイされたときにサービスを自動的に再起動します。とても助かります。

明確にするために、次のものが必要です。

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

上記の答えはほとんど素晴らしいですが、理解するのにしばらくかかったいくつかのことを欠いています。他の人も同じ問題に遭遇しました。コメントセクションを参照してください。

systemctl enable srv-watcher.{path,service}
systemctl start srv-watcher.{path,service}

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
StartLimitIntervalSec=10
StartLimitBurst=5

[Install]
WantedBy=multi-user.target

srv-watcher.path

[Path]
Unit=srv-watcher.service
PathChanged=/opt/srv/lib # trigger on changes to a file not just create/delete

[Install]
WantedBy=multi-user.target

機能している場合は、これらのメッセージがjournalctlに表示されます

$: journalctl -f -o cat -u srv-watcher
Starting srv-watcher...                                                                                          
Started srv-watcher.

その他の注意点、パッチは何度も起動する可能性がありますが、srv-watcher.serviceはデフォルトの制限である5秒の再起動を10秒間隔で順守します。 https://www.freedesktop.org/software/systemd/man/systemd.unit.html#StartLimitIntervalSec=interval

1
Drew