systemd 타이머 정의는 1초 동안 실행되지만 5초 동안 누출됩니다.

systemd 타이머 정의는 1초 동안 실행되지만 5초 동안 누출됩니다.

안녕하세요 여러분, 매초 foo.service를 실행하기 위해 foo.timer를 정의했습니다.

내 운영 체제 버전은 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를 시도했지만 이 문제가 발생하지 않았습니다. 이유는 무엇입니까?

답변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초 이내에 다시 시작하도록 설정합니다.

관련 정보