O temporizador Systemd é irregular

0

Estou tentando configurar um timer do systemd que será executado a cada 5 segundos (ele estará enviando estatísticas em tempo real para um servidor remoto) conforme explicado aqui .

Serviço

[Unit]
Description=PHP Cron
Wants=network.target
After=network.target

[Service]
Type=oneshot
StandardOutput=null
StandardError=syslog
ExecStart=/bin/sh -c "/usr/bin/date >> /tmp/date"

[Install]
WantedBy=multi-user.target

Temporizador

[Unit]
Description=Run cron service every 5 seconds

[Timer]
OnCalendar=*:*:0/5

Infelizmente, o cronômetro é muito irregular.

Fri Dec 29 12:21:21 IST 2017
Fri Dec 29 12:21:25 IST 2017
Fri Dec 29 12:21:33 IST 2017
Fri Dec 29 12:21:36 IST 2017
Fri Dec 29 12:21:41 IST 2017
Fri Dec 29 12:21:48 IST 2017
Fri Dec 29 12:21:52 IST 2017
Fri Dec 29 12:22:01 IST 2017
Fri Dec 29 12:22:07 IST 2017
Fri Dec 29 12:22:13 IST 2017
Fri Dec 29 12:22:23 IST 2017

Por que isso é assim? Os temporizadores do sistema não são confiáveis quando usados com intervalo menor que um minuto?

    
por Joyce Babu 29.12.2017 / 07:57

1 resposta

1

Por padrão, o systemd usa uma precisão muito baixa para que tarefas de vários timers (ou seja, diferentes tarefas que acontecem em poucos segundos) possam ser agrupadas em uma única execução, após o qual o sistema pode continuar inativo.

A opção pode ser definida em [Timer] e você desejará defini-la como 1s ou menor.

    AccuracySec=
       Specify the accuracy the timer shall elapse with. Defaults to 1min. The timer is
       scheduled to elapse within a time window starting with the time specified in
       OnCalendar=, OnActiveSec=, OnBootSec=, OnStartupSec=, OnUnitActiveSec= or
       OnUnitInactiveSec= and ending the time configured with AccuracySec= later. Within
       this time window, the expiry time will be placed at a host-specific, randomized,
       but stable position that is synchronized between all local timer units. This is
       done in order to optimize power consumption to suppress unnecessary CPU wake-ups.
       To get best accuracy, set this option to 1us. Note that the timer is still
       subject to the timer slack configured via systemd-system.conf(5)'s
       TimerSlackNSec= setting. See prctl(2) for details. To optimize power consumption,
       make sure to set this value as high as possible and as low as necessary.
    
por 29.12.2017 / 09:32