![当磁盘上的文件被修改时自动重新启动 systemd 服务](https://linux22.com/image/207764/%E5%BD%93%E7%A3%81%E7%9B%98%E4%B8%8A%E7%9A%84%E6%96%87%E4%BB%B6%E8%A2%AB%E4%BF%AE%E6%94%B9%E6%97%B6%E8%87%AA%E5%8A%A8%E9%87%8D%E6%96%B0%E5%90%AF%E5%8A%A8%20systemd%20%E6%9C%8D%E5%8A%A1.png)
我有一项服务,基本上是游牧客户端。它的最小版本如下所示:
[Unit]
Description=Nomad Client
Documentation=https://nomadproject.io/docs/
After=network-online.target
[Service]
ExecStart=/usr/bin/nomad agent -config /etc/myapp/myconfig.json
[Install]
WantedBy=multi-user.target
该服务使用 中提供的特定配置启动游牧进程/etc/myapp/myconfig.json
。
我正在使用的应用程序是围绕这个游牧客户端构建的,在应用程序的生命周期中,配置文件可以随时更改。
/etc/myapp/myconfig.json
我想每当磁盘上发生更改时重新启动服务。
答案1
你想创建一个路径单元。
为了回答这个问题,我假设您的服务单位称为nomad.service
。
首先,创建一个nomad-restart.service
oneshot
将重新启动您的nomad
服务的服务。使用以下内容创建 /etc/systemd/system/nomad-restart.service:
[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl restart nomad.service
接下来,我们需要一个.path
单元来在指定文件被修改时激活服务。/etc/systemd/system/nomad-restart.path
使用以下内容创建:
[Path]
PathChanged=/etc/myapp/myconfig.json
[Install]
WantedBy=multi-user.target
启动并启用路径单元:
systemctl enable --now nomad-restart.path
现在,只要指定的路径发生更改,您的服务就会重新启动。nomad-restart.path
当指定文件被修改时,该单元将触发。这将导致它激活(也称为“启动”)until
nomad-restart.service
,它将调用systemctl restart nomad.service
然后退出。