Raman - obrigado! Pregou.
Adicionei o seguinte ao vpnmon.timer:
AccuracySec=1us
Funciona perfeitamente agora.
Detalhes dessa configuração estão aqui:
Obrigado.
Eu tenho um Raspberry Pi rodando Debian Jessie.
O Pi está agindo como um gateway de VPN para quando eu viajo.
Eu tenho um script de monitor - python - que, quando acionado, gera uma lista de clientes conectados e envia essa lista via MQTT para a máquina do monitor de rede. Isso tudo funciona perfeitamente. Toda vez que eu inicio o script, ele é executado e posso ver a lista de clientes 'na outra extremidade' da cadeia MQTT. A lista de clientes inclui um registro de data e hora da máquina VPN que mostra a que horas ela foi acionada para fornecer o relatório.
Eu configurei adicionalmente um arquivo de serviço Systemd para que eu possa acionar esse script automaticamente. Este é o meu arquivo de serviço - 'vpnmon.service':
[Unit] Description=VPN Monitor script [Service] Type=simple ExecStart=/usr/bin/python /home/nick/lib/checkusers.py
Isso é acionado por um timer do sistema 'vpnmon.timer':
[Unit] Description=Runs vpnmon script every five seconds [Timer] OnBootSec=10s Unit=vpnmon.service OnUnitInactiveSec=5s [Install] WantedBy=multi-user.target
Isso faz todo o "trabalho".
MAS o script aparentemente não é acionado em intervalos de tempo regulares. Às vezes 10 segundos, às vezes 15 às vezes 20 - às vezes um minuto inteiro se passa antes de ser acionado.
Então, eu digito o seguinte para consultar o status do serviço:
systemctl status vpnmon.service
Eu obtenho um bom resultado:
● vpnmon.service - VPN Monitor script Loaded: loaded (/lib/systemd/system/vpnmon.service; static) Active: inactive (dead) since Thu 2017-09-28 09:52:01 UTC; 1s ago Process: 1138 ExecStart=/usr/bin/python /home/nick/lib/checkusers.py (code=exi ted, status=0/SUCCESS) Main PID: 1138 (code=exited, status=0/SUCCESS)
No curso de fazer isso, notei uma coisa estranha. Se eu consultar repetidamente o status, sempre recebo bons resultados, e percebo que o próprio ato de consultar o status do serviço por meio da linha de comando faz com que o script seja disparado exatamente quando esperado, ou seja, em intervalos de 5 segundos ...
O que há no ato de consultar um status do serviço systemd pode fazer com que o desencadeamento intermitente aparente desapareça? ?
É algo parecido com o armazenamento em buffer do Python? quando você usa um script para escrever coisas em um arquivo?
Raman - obrigado! Pregou.
Adicionei o seguinte ao vpnmon.timer:
AccuracySec=1us
Funciona perfeitamente agora.
Detalhes dessa configuração estão aqui:
Obrigado.
Tags systemd