시스템 타이머는 어떻게 작동하나요?

시스템 타이머는 어떻게 작동하나요?

이미 가지고 myscript.service있으며 이 서비스가 매시간 시작되기를 원합니다. 그래서 내가 썼다myscript.timer

Description=My script timer

[Timer]
OnCalendar=hourly
;OnCalendar=*-*-* 0/2:00:00

[Install]
WantedBy=timers.target

나는 시작했고 systemctl enable --now myscript.timer그 다음에는 systemctl status myscript.timer 얻었습니다.

[user@localhost ~]$ sudo systemctl status myscript.timer
● myscript.timer - My script timer
     Loaded: loaded (/etc/systemd/system/myscript.timer; enabled; vendor preset: disabled)
     Active: active (waiting) since Tue 2020-09-01 12:10:54 +05; 4s ago
    Trigger: Tue 2020-09-01 16:31:29 +05; 4h 20min left
   Triggers: ● myscript.service

Sep 01 12:10:54 localhost.localdomain systemd[1]: Started My script timer.

왜 한 시간 후에 트리거되지 않는지 이해가 안 되나요?

답변1

안타깝게도 현재 발생한 문제를 재현할 수 없습니다. 댓글로 판단하면 ;OnCalendar=필드를 계속 변경하고 있습니다. systemctl daemon-reload타이머를 편집하고 시작하는 사이에 이 기능을 사용하셨나요 ?

내 시스템에서 테스트하면 다음과 같이 표시됩니다.

$ systemctl --user cat mytime.timer
# /home/stew/.config/systemd/user/mytime.timer
[Unit]
Description=Test timer

[Timer]
OnCalendar=hourly


$ systemctl --user start mytime.timer
$ systemctl --user status mytime.timer
● mytime.timer - Test timer
     Loaded: loaded (/home/stew/.config/systemd/user/mytime.timer; static)
     Active: active (waiting) since Tue 2020-09-01 09:49:14 CEST; 7s ago
    Trigger: Tue 2020-09-01 10:00:00 CEST; 10min left
   Triggers: ● mytime.service

Sep 01 09:49:14 stewbian systemd[1691]: Started Test timer.

그런 다음 첫 번째 타이머가 만료될 때까지 10분을 기다렸다가 다음을 얻었습니다.


$ journalctl --user -u mytime.timer -u mytime.service
-- Logs begin at Mon 2020-07-06 04:41:08 CEST, end at Tue 2020-09-01 10:00:00 CEST. --
Sep 01 09:49:14 stewbian systemd[1691]: Started Test timer.
Sep 01 10:00:00 stewbian systemd[1691]: Starting mytime.service...
Sep 01 10:00:00 stewbian systemd[1691]: mytime.service: Succeeded.
Sep 01 10:00:00 stewbian systemd[1691]: Finished mytime.service.


$ systemctl --user status mytime.timer
● mytime.timer - Test timer
     Loaded: loaded (/home/stew/.config/systemd/user/mytime.timer; static)
     Active: active (waiting) since Tue 2020-09-01 09:49:14 CEST; 10min ago
    Trigger: Tue 2020-09-01 11:00:00 CEST; 59min left
   Triggers: ● mytime.service

Sep 01 09:49:14 stewbian systemd[1691]: Started Test timer.

이 예에서는 을 사용했습니다 OnCalendar=hourly. 첫 번째 트리거 포인트는 다음 시간의 시작 부분입니다. 두 번째 트리거는 다음 시간의 시작으로 설정됩니다.


문제가 이라고 의심되므로 daemon-reload이를 변경하여 문제를 재현해 보았습니다 OnCalendar=. 내가 찾은 것 :

  1. 사용하면 systemctl daemon-reload변경사항이 적용되었습니다.
  2. 그러면 systemctl stop그렇지 systemctl start않은 경우에도 변경 사항이 적용됩니다 daemon-reload.
  3. systemctl start이전 타이머를 중지하지 않으면 다음으로 변경합니다 .아니요이에 대해 신청하고 경고를 받습니다.
$ systemctl --user start mytime.timer
Warning: The unit file, source configuration file or drop-ins of mytime.timer
  changed on disk. Run 'systemctl --user daemon-reload' to reload units.

관련 정보