Таймер systemd определяет 1 с, но дает 5 с.

всем, я определяю foo.timer для запуска foo.service каждые секунды

моя версия ОС - centos7u2

#systemctl --version
systemd 219
-PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ -LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN

#systemctl cat  foo.timer
# /etc/systemd/system/foo.timer
[Unit]
Description=Run foo weekly and on boot

[Timer]
OnBootSec=15min
OnUnitActiveSec=1s
AccuracySec=1us


[Install]
WantedBy=timers.target

посмотрите что я вызываю:

#systemctl cat  foo.service
# /etc/systemd/system/foo.service
[Unit]
Description=test

[Service]
Type=oneshot
ExecStart=/usr/lib/aa.sh
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

скрипт:

#cat /usr/lib/aa.sh
#!/bin/sh
aa=`date`
echo $aa >> /var/log/aa.log

файл журнала:

Mon Jul 3 20:28:36 HDT 2017
Mon Jul 3 20:28:37 HDT 2017
Mon Jul 3 20:28:38 HDT 2017

Mon Jul 3 20:28:44 HDT 2017
Mon Jul 3 20:28:45 HDT 2017
Mon Jul 3 20:28:46 HDT 2017
Mon Jul 3 20:28:47 HDT 2017
Mon Jul 3 20:28:48 HDT 2017


Mon Jul 3 20:28:54 HDT 2017
Mon Jul 3 20:28:55 HDT 2017
Mon Jul 3 20:28:56 HDT 2017
Mon Jul 3 20:28:57 HDT 2017
Mon Jul 3 20:28:58 HDT 2017

посмотрите этот файл журнала, мы видим, я потерял 5 секунд содержимого. Пробую OnUnitActiveSec = 2s, эта проблема не возникает. Почему?

0
04.07.2017, 08:36
1 ответ

Я заметил, что systemd не строго следит за временем, из-за того, что я использую такой таймер, у меня не было проблем с ним.

Description=Timer

[Service]
Type=simple
ExecStart=/bin/sh -c "while true ; do echo Timer; usleep 500000; done"
Restart=always
RestartSec=1
StartLimitInterval=0

[Install]
WantedBy=multi-user.target

По сути, это бесконечный цикл, но ради стабильности я установил его перезапуск через 1 секунду, если он умирает.

0
28.01.2020, 04:44

Теги

Похожие вопросы