6
0

More than 1 year has passed since last update.

systemd-analyze calendarでスケジュールを確認する

Last updated at Posted at 2021-10-04

systemdでcronのようなスケジュールを設定する場合timerユニットを書きますが、これがcronの書式とは全然違うのでなかなか慣れないかと思います。

timerユニットの書き方(OnCalendarの場合)

たとえばこんな感じですね。

foo.timer
[Unit]
Description=Run foo weekly

[Timer]
OnCalendar=Sat *-*-1..7 18:00:00
Persistent=true     
 
[Install]
WantedBy=timers.target

このOnCalendarのところの書式がcronとは違います。

# 毎週(月曜日の0時)実行
OnCalendar=weekly

# 毎月の1日から4日まで、月曜日か火曜日の場合にのみ、12時に実行
OnCalendar=Mon,Tue *-*-01..04 12:00:00

# 毎週第1土曜日の18時に実行
OnCalendar=Sat *-*-1..7 18:00:00

# 毎日4時に実行
OnCalendar=*-*-* 4:00:00

ちなみにOnCalendarは複数指定できます。

# 平日の22:30と土日の20:00
OnCalendar=Mon..Fri 22:30
OnCalendar=Sat,Sun 20:00

この書式が具体的に何時に動くのか確認する

よほど慣れているならともかく、ぱっと見ていつ実行されるのかいまいち確信が持てなかったりしませんか?
業務で運用しているシステムに設定するときなんて「本当にこれで合ってるのか?」ってめちゃくちゃ不安になりますよね!

そこでsystemd-analyzeの登場です。

こいつはいろいろなサブコマンドを持っているのですが、これのsystemd-analyze calendarを使うと、OnCalendarに指定する書式が実際にいつ実行されるかというスケジュールを確認することができます。

$ systemd-analyze calendar --iterations=5 '*-*-* 00/12:00/30:00'
Normalized form: *-*-* 00/12:00/30:00
    Next elapse: Thu 2021-09-30 00:00:00 JST
       (in UTC): Wed 2021-09-29 15:00:00 UTC
       From now: 9h left
       Iter. #2: Thu 2021-09-30 00:30:00 JST
       (in UTC): Wed 2021-09-29 15:30:00 UTC
       From now: 9h left
       Iter. #3: Thu 2021-09-30 12:00:00 JST
       (in UTC): Thu 2021-09-30 03:00:00 UTC
       From now: 21h left
       Iter. #4: Thu 2021-09-30 12:30:00 JST
       (in UTC): Thu 2021-09-30 03:30:00 UTC
       From now: 21h left
       Iter. #5: Fri 2021-10-01 00:00:00 JST
       (in UTC): Thu 2021-09-30 15:00:00 UTC
       From now: 1 day 9h left

試しに実行してみるとこんな感じになりました。

*-*-* 00/12:00/30:00は毎日00:00、00:30、12:00、12:30に実行という指定です。見るからにややこしい指定ですが、具体的にいつ実行されるかがずらっと表示されました。わかりやすいですね!

使える環境

systemd-analyzeコマンド自体はだいたいの環境にあると思うのですが、calendarサブコマンドが追加されたのはsystemd 236からのようです。

加えて、上記の例のように指定の周期分出力する--iterationsオプションが追加されたのはsystemd 242からのようです。

ちょっと古めのOSだと使えない可能性がありますね。
まぁ、確認するだけならどこかで新しいOSを動かしてコマンド叩けばいいですね。

  • calendarサブコマンドはsystemd 236から
  • --iterationsオプションはsystemd 242から

参考までによくあるOSとバージョンです。

OS systemdのバージョン
CentOS 7 systemd 219
CentOS 8 systemd 239
CentOS 8 Stream systemd 239
Ubuntu 18.04 LTS (Bionic Beaver) systemd 237
Ubuntu 20.04 LTS (Focal Fossa) systemd 245

参考

6
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
0