毎月最後の日にサービスを実行するように 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 ]]

関連情報