RHEL7旧版systemd路径单元无法响应符号链接变更问题
解决systemd .path单元不响应符号链接创建/替换的问题
针对RHEL7上systemd 219版本的情况,问题出在默认的符号链接追踪行为上,以下是具体解决方法:
修改.path单元配置
在你的.path单元的[Path]段添加FollowSymlinks=no配置项,修改后的完整配置如下:
[Unit] Description=Watch for Foo in %i [Install] WantedBy=multi-user.target [Path] PathChanged=/tmp/%i.dbstatus FollowSymlinks=no
原理说明
systemd 219中FollowSymlinks的默认值为yes,这意味着.path单元会追踪符号链接指向的目标文件的变化,而非符号链接文件本身的元数据/属性变化。当你执行ln -s(或ln -sf)创建/替换符号链接时,变化的是符号链接文件本身的inode或属性,而非目标文件,因此默认配置下不会触发PathChanged条件。
添加FollowSymlinks=no后,systemd会直接监控指定路径的文件(包括符号链接本身)的变化,此时创建、替换符号链接这类原子操作会正常触发对应的.service单元。
验证步骤
修改配置后,执行以下命令重新加载并生效:
systemctl daemon-reload systemctl enable --now Foo@Bar.path
之后执行符号链接创建/替换操作,检查%h/mxapps/Bar/logs/Foo.log日志是否有新的输出,确认服务已触发。
内容的提问来源于stack exchange,提问作者Mikhail T.
相关产品推荐
相关产品推荐

