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
3 番目は*
その月の日付を表します。だから:
OnCalendar=*-*-01 00:00:00
毎月1日を意味します。 「2日ごと」というフレーズには開始点が必要です。そうでなければあいまいになります。これは、システムの起動後2日ごと、2020年1月1日以降の偶数日、エポック以降の奇数日などです。今日は偶数日ですか、奇数日ですか?スケジュールを計画するときは、特定の日付を定義する方がはるかに簡単です。
これは働きます:
OnCalendar=*-*-1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31 00:00:00
つまり、毎月奇数日ごとに実行され、これは1日に2回という要件に非常に近いです。
起動直後の場合は、次のように動作します。
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