2일마다 실행되는 시스템 타이머를 만드는 방법은 무엇입니까? [복사]

2일마다 실행되는 시스템 타이머를 만드는 방법은 무엇입니까? [복사]

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    

관련 정보