systemd
允许将一个.path
单元和一个.service
单元组合在一起,这样写入文件即可激活服务。现在考虑每次修改文件后都应启动服务。可以将多个修改合并为一个启动,但服务单元应在每次修改后启动。这不是 systemd 通常的运行方式。如果服务在修改时正在运行,则被视为活动且未激活,但在这种情况下应在完成后立即激活。这些语义可以通过其他方式实现吗?
systemd
允许将一个.path
单元和一个.service
单元组合在一起,这样写入文件即可激活服务。现在考虑每次修改文件后都应启动服务。可以将多个修改合并为一个启动,但服务单元应在每次修改后启动。这不是 systemd 通常的运行方式。如果服务在修改时正在运行,则被视为活动且未激活,但在这种情况下应在完成后立即激活。这些语义可以通过其他方式实现吗?
在我的 systemd 版本 253 上,手册页
systemd.path
显示我不认为这是正确的
PathModified
。下面是一个可以解决这个问题的例子。创建路径单元my.path
:及服务单位
my.service
:当服务启动时,我们会在执行有用的命令(在此示例中为
cat -n
)之前使用时间戳文件记录时间,然后使用 sleep 来表示在路径中处理数据的结束与单元变为非活动状态并可重新启动之间的间隙。然后,该
ExecStop
命令检查数据文件是否比-nt
时间戳 () 更新,如果是,则触发服务单元重新启动。如果没有此行,我发现可能会错过数据文件的更改。我测试过:
c
如果没有 ,则会错过最后一次数据文件的更改ExecStop
。