小编Tim*_*Tim的帖子

如何知道哪个文件或 inode 触发了 systemd.path 单元?

Systemd 提供了通过 inotify 控制特定路径监视的单元文件:systemd.path(5). 如果在监视路径中修改了文件或目录,systemd.service(5)则调用相应的。

根据inotify(7)手册页:

为了确定发生了什么事件,应用程序从 inotify 文件描述符中读取 (2)s。如果到目前为止没有事件发生,那么,假设一个阻塞的文件描述符,read(2) 将阻塞直到至少一个事件发生(除非被信号中断,在这种情况下调用失败并显示错误 EINTR;参见信号(7) ))。

每次成功的 read(2) 都会返回一个包含以下一个或多个结构的缓冲区:

      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 */
      };
Run Code Online (Sandbox Code Playgroud)

因此,如果 systemd 看到监视路径发生变化,是否有办法从read(2)命令中获取任何数据?值得注意的是我需要的name[]使用作为参数传递给该命令的ExecStart=systemd.service(5)单元发言。

[Service]
ExecStart=/usr/bin/command --file=$inotifyName
Run Code Online (Sandbox Code Playgroud)

linux inotify systemd

13
推荐指数
1
解决办法
2757
查看次数

标签 统计

inotify ×1

linux ×1

systemd ×1