我有简单的 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 restart
,touch restart
然后restart.service
由restart 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 仍会认为它已启用,而在更改后无法禁用它,如上所示。 (由于缺少安装部分)