Como reiniciar um serviço systemd quando um arquivo não foi modificado por um período de tempo?

1

Minha configuração tem um serviço systemd que deve gravar periodicamente em um arquivo. Eu gostaria de monitorar o arquivo para alterações, por isso, quando ele não foi modificado por um tempo, eu sei que o serviço tem bugged out. Gostaria de poder reiniciar automaticamente o serviço quando isso acontecer.

Eu tentei usar o arquivo de unidade caminho , mas ele só pode iniciar uma comando quando o arquivo monitorado é alterado, e não o contrário.

A questão oposta foi perguntado, onde o serviço precisa ser reiniciado quando um arquivo foi alterado, mas a solução não parece ser diretamente aplicável à minha situação.

    
por pinealan 21.01.2018 / 03:31

1 resposta

1

Enquanto a resposta do comentário traz um bom ponto sobre onde se deve concentrar sua energia ao lidar com uma questão como esta (depurar e tentar determinar por que ela pode estar pendurada?), uma possível solução para sua pergunta pode ser para configurar um systemd-timer que é acionado em qualquer intervalo que você deseja verificar esse arquivo e execute um script que faça seus testes e ações. Talvez algo como (se você estiver usando 1 hora como seu intervalo):

Temporizador

[~]# cat /etc/systemd/system/checkhung.timer 
[Unit]
Description=Check if file not modified in a while and restart service

[Timer]
OnActiveSec=60min
OnUnitActiveSec=60min

Serviço

[~]# cat /etc/systemd/system/checkhung.service 
[Unit]
Description=Check if file not modified in a while and restart service

[Service]
Type=oneshot
ExecStart=/usr/local/bin/checker.sh

Script

[~]# cat /usr/local/bin/checker.sh
#!/bin/bash

if [[ $(find /path/to/the/file.txt -mmin +60) ]]
then
    /usr/bin/systemctl restart my-service.service
fi

Note que eu não testei isso, então alguns ajustes podem ser necessários.

    
por 21.01.2018 / 21:46