Systemd oferece arquivos de unidade que controlam o monitoramento de um determinado trough caminho inotify: systemd.path(5)
. Se um arquivo ou diretório for modificado no caminho monitorado, o correspondente systemd.service(5)
será chamado.
De acordo com a inotify(7)
página do manual:
Para determinar quais eventos ocorreram, um aplicativo leu (2) s do descritor de arquivo inotify. Se nenhum evento ocorreu até agora, assumindo um descritor de arquivo de bloqueio, o read (2) bloqueará até que pelo menos um evento ocorra (a menos que seja interrompido por um sinal, caso em que a chamada falhará com o erro EINTR; consulte o sinal (7 )).
Cada leitura bem-sucedida (2) retorna um buffer que contém uma ou mais das seguintes estruturas:
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 */ };
Portanto, se o systemd vê uma alteração no caminho monitorado, existe uma maneira de obter dados do read(2)
comando? Notavelmente, preciso name[]
que ele seja usado como argumento para o comando ExecStart=
da systemd.service(5)
instrução na unidade.
[Service]
ExecStart=/usr/bin/command --file=$inotifyName
read(2)
, para trabalhar com o evento. Então, como o systemd o usa e posso usar dados de read(2)
um arquivo de unidade do systemd como uma variável ou especificador?