systemd
permite combinar uma .path
unidade e uma .service
unidade de modo que escrever um arquivo ativará o serviço. Agora considere que o serviço deve ser iniciado após cada modificação de arquivo. Não há problema em unir várias modificações em um único início, mas a unidade de serviço deve ser iniciada após cada modificação. Não é assim que o systemd normalmente opera. Se o serviço estiver em execução no momento da modificação, ele será considerado ativo e não ativado, mas deverá ser ativado imediatamente após terminar nessa situação. Essas semânticas podem ser alcançadas de alguma outra forma?
No meu systemd versão 253, a página do manual
systemd.path
dizNão acho que isso seja verdade para
PathModified
. Aqui está um exemplo que pode ser uma maneira de contornar isso. Crie a unidade de caminhomy.path
:e a unidade de serviço
my.service
:Quando o serviço é iniciado, anotamos o tempo com um arquivo de registro de data e hora antes de executar o comando útil (neste exemplo, um
cat -n
), seguido por um sleep para representar o intervalo entre o fim do processamento dos dados no caminho e a unidade se tornar inativa e, portanto, reiniciável.O
ExecStop
comando então verifica se o arquivo de dados é mais novo que (-nt
) o timestamp e, se for, aciona a unidade de serviço para iniciar novamente. Sem essa linha, acho que uma alteração do arquivo de dados pode ser perdida.Eu testei com:
A última alteração no arquivo de dados
c
é perdida sem oExecStop
.