我使用 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