Tim*_*Tim 13 linux inotify systemd
Systemd 提供了通过 inotify 控制特定路径监视的单元文件:systemd.path(5)
. 如果在监视路径中修改了文件或目录,systemd.service(5)
则调用相应的。
根据inotify(7)
手册页:
为了确定发生了什么事件,应用程序从 inotify 文件描述符中读取 (2)s。如果到目前为止没有事件发生,那么,假设一个阻塞的文件描述符,read(2) 将阻塞直到至少一个事件发生(除非被信号中断,在这种情况下调用失败并显示错误 EINTR;参见信号(7) ))。
每次成功的 read(2) 都会返回一个包含以下一个或多个结构的缓冲区:
Run Code Online (Sandbox Code Playgroud)struct inotify_event { int wd; /* Watch descriptor */ uint32_t mask; /* Mask of events */ uint32_t cookie; /* Unique cookie associating related events (for rename(2)) */ uint32_t len; /* Size of name field */ char name[]; /* Optional null-terminated name */ };
因此,如果 systemd 看到监视路径发生变化,是否有办法从read(2)
命令中获取任何数据?值得注意的是我需要的name[]
使用作为参数传递给该命令的ExecStart=
的systemd.service(5)
单元发言。
[Service]
ExecStart=/usr/bin/command --file=$inotifyName
Run Code Online (Sandbox Code Playgroud)
Steward在 unix.stackexchange.com 上安静地提出了合理的解决方法
经过一番尝试后,我发现最简单的方法是每个路径使用一个 *.path 文件,并将每个路径模板化为单个 *@.service 文件。
干杯
归档时间: |
|
查看次数: |
2757 次 |
最近记录: |