O Systemd oferece arquivos unitários que controlam o monitoramento de um determinado caminho através do inotify: systemd.path(5)
. Se um arquivo ou diretório for modificado no caminho observado, o systemd.service(5)
correspondente será chamado.
De acordo com a página inotify(7)
man:
To determine what events have occurred, an application read(2)s from the inotify file descriptor. If no events have so far occurred, then, assuming a blocking file descriptor, read(2) will block until at least one event occurs (unless interrupted by a signal, in which case the call fails with the error EINTR; see signal(7)).
Each successful read(2) returns a buffer containing one or more of the following structures:
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 */ };
Então, se o systemd ver uma mudança no caminho observado, existe uma maneira de obter dados do comando read(2)
? Notavelmente eu preciso que o name[]
seja usado como um argumento para o comando para o ExecStart=
na instrução systemd.service(5)
unit.
[Service]
ExecStart=/usr/bin/command --file=$inotifyName