Systemd предлагает файлы модулей, которые контролируют мониторинг определенного пути inotify: systemd.path(5)
. Если файл или каталог изменен в отслеживаемом пути, вызывается соответствующий systemd.service(5)
.
Согласно справочной странице inotify(7)
:
Чтобы определить, какие события произошли, приложение считывает (2) из дескриптора файла inotify. Если до сих пор не произошло никаких событий, то, предполагая блокирующий дескриптор файла, read (2) будет блокировать, пока не произойдет хотя бы одно событие (если оно не прервано сигналом, в этом случае вызов завершается ошибкой EINTR; см. Signal (7))).
Каждое успешное чтение (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 */ };
Так что, если systemd видит изменение в отслеживаемом пути, есть ли способ получить какие-либо данные из команды read(2)
? В частности, мне нужно, чтобы name[]
использовалось в качестве аргумента команды для ExecStart=
в systemd.service(5)
.
[Service]
ExecStart=/usr/bin/command --file=$inotifyName