每当目录更改时(其中的任何文件)自动重新启动Systemd服务


25

文件更改时如何重新启动Systemd服务。我有一个Java服务,当任何jar文件发生更改时,我都想重新加载该服务。

这是我的设置:

服务

[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

路径

[Path]
PathModified=/opt/srv/lib/

我还尝试使用PathChanged和使用文件而不是目录。

当我安装了服务,我执行:sudo systemctl daemon-reloadsudo systemctl enable srv

谢谢!


2
没有经过测试,所以不是一个答案,但是从文档看来,这些path单元仅对激活(启动)其他单元有用。在这里,您可以srv-restart.path使用PathChanged=/opt/srv/lib/srv-restart.service一起创建ExecStart=systemctl restart srv.service
米哈尔Politowski

看来,如果您将其命名为与服务(带有.path)相同的名称,则路径文件将指向同一服务:freedesktop.org/software/systemd/man/systemd.path.html但是...我不知道如果它仅启动服务或什至在已经运行时重新启动
干扰了

据我从文档中了解到,srv.path它只能做的等效操作systemclt start srv.service,因此要自动重启,您将需要另一个服务,该服务在启动时会重启您的服务。
米哈尔Politowski

你需要启动它systemctl start srv.path-而要把它开始启动systemctl preset srv.path
迈克尔D.

Answers:


22

Michal Politowski的评论是完全正确的。部署新工件时,我使用此方法自动重启服务。这是非常有帮助的。

要清楚,您需要:

服务

[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
如果快速连续更改大量文件,是否可以保证何时触发此操作?
Rich Remer '18

3
重要的是要记住,还需要启用«.path»单元。在这种情况下:systemctl enable srv-watcher.path && systemctl start srv-watcher.path
PauRuŀlanFerragut 18年

1
如果您的重新启动服务与.path 文件的名称不同, 则只需将其添加Unit=nameofmyrestart.service到文件的[Path]部分中即可.pathfreedesktop.org/software/systemd/man/systemd.path.html#Unit=
DKebler '19

在CentOS中可以很好地重新启动Kestrel(ASP.NET Core)
Suleman,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.