Я пытаюсь настроить системный таймер, который будет запускаться каждые 5 секунд (он будет отправлять статистику в реальном времени на удаленный сервер), как описано здесь.

обслуживание

[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

таймер

[Unit]
Description=Run cron service every 5 seconds

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

К сожалению, таймер очень нерегулярный.

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

Почему это так? Являются ли системные таймеры ненадежными при использовании с интервалом менее минуты?

1 ответ1

1

По умолчанию systemd использует очень низкую точность, чтобы задания с несколькими таймерами (то есть разные задачи, все выполняющиеся в течение нескольких секунд) могли быть сгруппированы в один прогон, после чего система может продолжать работать на холостом ходу.

Параметр может быть установлен в [Timer] и вы захотите установить его на 1s или ниже.

    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.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .