매월 마지막 날에 서비스를 실행하도록 Systemd 타이머를 구성하는 방법

매월 마지막 날에 서비스를 실행하도록 Systemd 타이머를 구성하는 방법

매월 마지막 날에 서비스 파일을 실행하고 싶습니다. 이것을 구성하는 방법은 무엇입니까? 내 말은시스템 타이머그러나 올바른 길을 찾을 수 없습니다.

또한, 해당 월의 마지막 영업일에 실행되도록 다른 구성을 추가할 수 있습니까? (일요일, 토요일 이외의 요일)

답변1

버전 233부터 systemd는 달력 구문에 "~"를 사용하여 월말을 기준으로 날짜를 지정할 수 있도록 지원합니다.

OnCalendar=*-02~032월의 3일부터 마지막 ​​날까지(윤년 여부에 따라 26일 또는 27일)를 의미합니다.

Mon *-05~07/1Mon *-05~01..075월 마지막 월요일의 동의어입니다 .

https://github.com/systemd/systemd/blob/v233/NEWS#L174

답변2

가장 간단한 해결책은 매일 실행되고 내일이 매월 1일인지 확인하는 타이머를 사용하는 것입니다. 그것은 다음과 같습니다:

내 타이머.타이머:

[Unit]
Description=run mytimer.service daily at 6am
[Timer]
OnCalendar=6:00
Persistent=true
[Install]
WantedBy=timers.target

내 타이머 서비스:

[Unit]
Wants=mytimer.timer
Description=run on last day of month
[Service]
Type=oneshot
ExecStart=/bin/bash -c '[ $(date --date=tomorrow +%d) -eq 1 ] && \
                        /bin/myscript'

그 달의 마지막 근무일에 대해 다음과 같이 계산했습니다. 다음 3일을 보고 날짜가 3일이고 날짜가 목요일부터 월요일까지 포함되는지 확인하거나 날짜가 1일 또는 2일이고 날짜가 다음인지 확인합니다. 월요일에. 날짜와 %w를 사용하여 요일(0=일요일)을 나타내는 동등한 bash 테스트는 다음과 같습니다.

[[ $(date --date=+3days +%d%w) =~ 03[45601]|011|021 ]]

관련 정보