如果在 Unit= 内删除跟踪文件,Systemd 路径 PathExists= 不起作用?

如果在 Unit= 内删除跟踪文件,Systemd 路径 PathExists= 不起作用?

我有简单的 systemd.path restart.path

[Unit]
Description=

[Path]
PathExists=/home/ubuntu/restart
Unit=restart.service

[Install]
WantedBy=multi-user.target

以及触发的restart.service服务:

[Unit]
Description=

[Service]
ExecStartPre=echo PREPARING TO RESTART...
ExecStart=true
ExecStopPost=echo OK
ExecStopPost=/bin/rm -f /home/ubuntu/restart

[Install]
WantedBy=multi-user.target

行为如下: touch restart PREPARING TO RESTART... OK 事实上,restart文件消失了。但是,如果我尝试再次创建文件: touch restart 什么也没有发生...然后如果我这样做rm restarttouch restart然后restart.servicerestart path

关于这一点的文档非常模糊,我最终无法理解为什么会发生这种情况以及如何解决 - 我希望restart.service每次restart创建时都运行。

答案1

在你的restart.service

[Unit]
Description=

[Service]
Type=simple
ExecStartPre=echo PREPARING TO RESTART...
ExecStart=/bin/rm -f /home/ubuntu/restart

换句话说,不要使用这些ExecStopPost=行,也不要使用该[Install]部分,因为您应该只启用该restart.path单元。

  • ⚠️ 确保禁用该restart.service设备进行如上所述的更改,否则 systemd 仍会认为它已启用,而在更改后无法禁用它,如上所示。 (由于缺少安装部分)

相关内容