Como saber qual arquivo ou inode acionou uma unidade systemd.path?

8

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
Tim
fonte
Claro que existe: você pode programar C?
MariusMatutiae
Não. Apenas salientando que, se um programa estiver usando o inotify, ele poderá incluir 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?
Tim
Faz isso de dentro de um programa C: read (2) é um sistema todo, você pode verificá-lo no man man.
MariusMatutiae
2
Você descobriu? Também estou olhando para executar um script.
precisa saber é o seguinte
11
É uma pergunta justa, e eu gostaria de ouvir o mesmo. Em particular, porque finalmente consegui mudar o esqueleto do meu serviço de monitoramento do inotify (!), Com esperança de usar unidades de caminho systemd como o inotify! :( Eu sinto que eu (nós) deve ser vista para alguma coisa ...?
texas-Bronius