OnCalendar의 작동 방식을 이해하기 위한 가이드를 찾고 있습니다. 이해가 안 돼요... 시스템 타이머를 2일마다 실행하려면 어떻게 해야 하나요?
[Unit]
Description=systemd every 2 days.
[Timer]
OnCalendar=*-*-* 00:00:00
Persistent=true
Unit=personal.service
[Install]
WantedBy=timers.target
답변1
바라보다시스템 시간(7).
이는 우리의 일일 보고서를 다음과 같이 알려줍니다.
OnCalendar=*-*-* 00:00:00
세 번째는 *
해당 월의 날짜를 나타냅니다. 그래서:
OnCalendar=*-*-01 00:00:00
매월 1일을 의미합니다. "이틀마다"라는 문구는 시작점이 필요합니다. 그렇지 않으면 모호해질 것입니다. 이는 시스템 부팅 이후 2일마다, 2020년 1월 1일 이후 매 짝수일 또는 에포크 이후 매 홀수일 등일 수 있습니다. 오늘은 짝수날인가요, 홀수날인가요? 일정을 계획할 때 특정 날짜를 정의하는 것이 훨씬 쉽습니다.
이것은 작동합니다:
OnCalendar=*-*-1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31 00:00:00
즉, 매월 홀수일마다 실행되며 이는 하루에 두 번이라는 요구 사항에 매우 가깝습니다.
부팅 직후라면 다음과 같이 작동합니다.
OnBootSec=2d
그러나 재부팅하면 일정이 재설정되고 다음 2일 동안 실행되지 않습니다.
OnBootSec=
세부정보 및 기타 옵션은 다음에서 확인할 수 있습니다.OnCalendarSec=
systemd.timer(5)
다른 형태의 테스트를 사용할 수도 있습니다 systemd-analyze calendar <expr>
. 이렇게 하면 타이머를 편집하고 활성화하지 않고도 표현식에 대한 일부 정보를 얻을 수 있습니다.
예:
$ systemd-analyze calendar *-*-1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31 00:00:00
Original form: *-*-1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31
Normalized form: *-*-01,03,05,07,09,11,13,15,17,19,21,23,25,27,29,31 00:00:00
Next elapse: Sun 2021-01-17 00:00:00 CET
(in UTC): Sat 2021-01-16 23:00:00 UTC
From now: 1 day 1h left
Original form: 00:00:00
Normalized form: *-*-* 00:00:00
Next elapse: Sat 2021-01-16 00:00:00 CET
(in UTC): Fri 2021-01-15 23:00:00 UTC
From now: 1h 55min left