systemd timer define 1s excute mas vaza 5s

0

todos, eu defino um foo.timer para excuar foo.service a cada segundo

minha versão do sistema operacional é 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

veja o que eu explico:

#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

script:

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

arquivo de 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

veja este arquivo de log, podemos ver, eu perdi 5 segundos de conteúdo. Eu tento OnUnitActiveSec = 2s, esse problema não aparece, por isso?

    
por 穆阿浩 04.07.2017 / 07:36

1 resposta

0

Eu notei que systemd não segue estritamente o tempo, por causa disso eu estou usando esse tipo de temporizador, não tive problemas com isso.

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

Basicamente, é um loop que nunca termina, mas por causa da estabilidade, ele foi configurado para reiniciar em 1 segundo se ele morrer.

    
por 04.07.2017 / 07:45