Systemd problema de temporização irregular

2

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?

    
por Oldnick 28.09.2017 / 12:02

1 resposta

4

Raman - obrigado! Pregou.

Adicionei o seguinte ao vpnmon.timer:


AccuracySec=1us

Funciona perfeitamente agora.

Detalhes dessa configuração estão aqui:

link

Obrigado.

    
por 28.09.2017 / 12:35