为什么 Systemd 路径单元不重新启动服务

为什么 Systemd 路径单元不重新启动服务

我使用 Ubuntu 18.04。我为我的 Sneakers 工作者进程创建了服务和路径单元。

运动鞋.服务:

[Unit]
Description=sneakers
After=syslog.target network.target
[Service]
Type=simple
WorkingDirectory=/home/deploy/rails_app/current
ExecStart=/home/deploy/.rbenv/bin/rbenv exec bundle exec rails sneakers:run
User=deploy
Group=deploy
UMask=0002
Environment=MALLOC_ARENA_MAX=2
Environment=RAILS_ENV=production
RestartSec=1
Restart=on-failure
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=sneakers
[Install]
WantedBy=multi-user.target

和 sneakers.path

[Path]
PathModified=/home/deploy/rails_app/current/tmp/restart.txt
[Install]
WantedBy=multi-user.target

然后我启用它们并启动路径单元:

sudo systemctl enable sneakers.{path,service}
sudo systemctl start sneakers.path

启动正常,服务脚本运行良好。但是当文件 restart.txt 发生更改时(我尝试修改它),它不会重新启动。

我尝试了分步教程https://www.redhat.com/sysadmin/introduction-path-units- 在我的系统上它运行良好。不同之处在于本教程使用一些执行后存在的短时间运行(一次性)脚本。而我的服务在 ExecStart 中使用长时间运行的前台任务。

我如何才能使我的服务正常运行并通过文件接触重新启动?

答案1

systemd.path单位没有关于启动服务,但仅开始它们。这里有一种方法,您可以定义新的“观察者”服务单元和将启动的路径单元重新开始你的服务):https://superuser.com/questions/1171751/restart-systemd-service-automatically-whenever-a-directory-changes-any-file-ins

答案2

你有没有尝试过PathChanged

PathChanged=可用于监视文件或目录,并在其更改时激活配置单元。它不会在每次写入监视文件时激活,但如果打开以进行写入的文件被关闭,则会激活。

PathModified=类似,但此外它在对所监视的文件进行简单写入时也被激活。

您的参考链接打开了一个错误,因为路径单元没有捕获所有事件https://bugzilla.redhat.com/show_bug.cgi?id=1722627

相关内容