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


24

ファイルが変更されたときに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

ありがとう!


2
テストされていないので答えではありませんが、ドキュメントからは、pathユニットは他のユニットをアクティブ化(開始)するためにのみ役立つようです。ここsrv-restart.pathPathChanged=/opt/srv/lib/srv-restart.serviceでおそらく作成できますExecStart=systemctl restart srv.service
ミチャウポリトフスキ

サービスと同じ名前を付けた場合(.pathを使用)、パスファイルは同じサービスを参照しているようです。ただし、freedesktop.org / software / systemd / man / systemd.path.html ...わかりませんサービスを開始するだけの場合、または既に実行中の場合は再起動する場合
ジャミング

私がドキュメントから理解しているsrv.pathように、に相当することしかできないsystemclt start srv.serviceので、再起動を自動化するには別のサービスが必要になります。
ミチャウポリトウスキ

あなたはそれを起動する必要がありsystemctl start srv.path、それがブート時に開始しているために-systemctl preset srv.path
マイケル・D.

回答:


21

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

6
多数のファイルが連続して変更される場合、これがいつトリガーされるかについての保証はありますか?
リッチレーマー

3
«.path»ユニットも有効にする必要があることに注意してください。この場合:systemctl enable srv-watcher.path && systemctl start srv-watcher.path
PauRuŀlanFerragut 18

1
再起動サービスが.path ファイルと同じ名前でない場合は、 ファイルUnit=nameofmyrestart.service[Path]セクションに追加するだけ.pathです。 freedesktop.org/software/systemd/man/systemd.path.html#Unit=
DKebler

CentOSでKestrel(ASP.NET Core)を再起動しても問題なく動作する
-Suleman
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.