带有 PathExists 的 systemd 路径单元

带有 PathExists 的 systemd 路径单元

我一直致力于创建一个非常简单的服务,该服务监视文件是否存在的位置,然后运行脚本。我了解拥有 .path 单元和 .service 单元的 systemd 布局,并且我已经设法让它工作。然而,我觉得 PathExists 真的很奇怪。在测试中我看到的是,如果我创建文件,该单元就会触发。然后我的脚本删除该文件。如果我再次创建该文件,该装置似乎无法运行。如果我随后手动删除该文件并再次创建它,则该单元将运行。我已经做了一遍又一遍,它似乎遵循这个模式。我改用 PathModified,每次创建文件时它都会捕获该文件。但是,可以肯定它在文件被删除时也会运行。

这是服务文件

路径文件

[Unit]
Description=My app
Wants=myapp.service

[Path]
PathExists=/tmp/pathtofile/file

[Install]
WantedBy=multi-user.target

这是服务文件

[Unit]
Description=My App service file

[Service]
Type=simple
ExecStart=-/path/to/my/script/script.sh param1

有任何想法吗?

答案1

您的文件与我的工作内容有所不同,但我不确定您的文件中的哪一行是有问题的:

[root@localhost]~# cat run
#!/bin/sh
date +%s >> /root/run.log
[root@localhost]~# chmod +x run
[root@localhost]~# cat /etc/systemd/system/foo.service
[Unit]
Description=My App service file

[Service]
ExecStart=/root/run
[root@localhost]~# cat /etc/systemd/system/foo.path
[Unit]
Description=My app

[Path]
PathExists=/root/trigger
Unit=foo.service

[Install]
WantedBy=multi-user.target
[root@localhost]~# systemctl start foo.path
[root@localhost]~# rm run.log
[root@localhost]~# touch trigger
[root@localhost]~# rm trigger
[root@localhost]~# touch trigger
[root@localhost]~# cat run.log
1658387828
1658387829

相关内容