当磁盘上的文件被修改时自动重新启动 systemd 服务

当磁盘上的文件被修改时自动重新启动 systemd 服务

我有一项服务,基本上是游牧客户端。它的最小版本如下所示:

[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然后退出。

相关内容