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

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    

関連情報