我可以使用 systemd 根据文件的存在来启动和停止服务吗?

mpr*_*mpr 10 systemd

到目前为止我的配置是:

路径

[Path] 
PathExists=/tmp/foo.path

[Install] 
WantedBy=multi.user.target
Run Code Online (Sandbox Code Playgroud)

服务

[Unit]
Description=Matt Test
BindsTo=foo.path

[Service]
ExecStart=/bin/sh /home/mpekar/bin/foo.sh 
PIDFile=/run/foo.pid
Run Code Online (Sandbox Code Playgroud)

这在启动时工作正常,但在删除 /tmp/foo.path 时 foo.service 不会被终止。有什么方法可以让 systemd 做到这一点,还是它不是适合这项工作的工具?

Mar*_*erg 6

我会尝试这个。使用 PathChanged 创建附加服务:

foo-stop.path

[Path] 
PathChanged=/tmp/foo.path

[Install] 
WantedBy=multi.user.target
Run Code Online (Sandbox Code Playgroud)

然后创建:foo-stop.service

让其“ExecStart”脚本检查是否/tmp/foo.path已被删除(因为 PathChanged 也可能会触发其他更改)。如果路径已被删除,请让脚本调用/bin/systemctl stop foo.

  • 我将继续接受这一点,直到 systemd 提供明确的选项来执行相同的操作。 (2认同)