使い方
OnCalendar=の式(daily、Mon..Fri 09:00、*:0/15など)を入力すると、曜日・年・月・日・時刻ごとの意味と、対応するcron式、次回5回の実行日時(ブラウザのローカル時刻)が即座に表示される。- よく使う式はプリセットボタンから選べる。
- 下部の入力欄にcron式(
分 時 日 月 曜日)を入れると、対応するOnCalendar式に逆変換される。 - 表現できない場合(cronに存在しない秒・年の指定など)は「cron では表現不可」と表示される。
仕組み・計算式
OnCalendar= の書式は systemd.time(7) のcalendar event形式に基づく。基本形は [曜日] [年-月-日] [時:分:秒] で、各フィールドは *(任意)、カンマ区切りリスト、a..b の範囲、a/b のステップ(aから始めてb刻み)を組み合わせられる。daily・weekly・monthly・hourly などの略記は、それぞれ *-*-* 00:00:00・Mon *-*-* 00:00:00・*-*-01 00:00:00・*-*-* *:00:00 の短縮形として定義されている。次回実行日時は、この仕様に沿って日付・曜日・時刻の各条件をすべて満たす直近の日時を順に探索して算出している。
現場の落とし穴: cronでは日(day-of-month)と曜日(day-of-week)を両方とも*以外に指定すると「どちらか一方に一致すればよい」というOR条件になるが、systemdのOnCalendar=では曜日指定と日付指定は常にAND条件(両方一致が必要)で解釈される。そのため 0 0 1 * MON(毎月1日または毎週月曜)のようなcron式は、単一のOnCalendar=で意味的に同じものを再現できない。このツールでもcron→OnCalendar変換時にこのケースを検出して警告を出す。
よくある質問
Q. Persistent=とは何ですか?
A. タイマーが実行対象の時刻を過ぎてから起動した場合(PCがスリープしていた等)に、次回のスケジュールまで待たず1回だけ即座に実行させる設定。ノートPCのようにマシンが常時起動していない環境で有用。
Q. RandomizedDelaySec=は何のためにありますか?
A. 指定した秒数の範囲でランダムな遅延を実行時刻に加える設定。多数のホストで同じcronライクな時刻にジョブを実行すると外部サービスやディスクI/Oに負荷が集中するため、それを分散させる目的で使われる。
Q. このツールの計算はsystemd-analyze calendarと完全に一致しますか?
A. 一般的な書式(曜日・日付・時刻のリスト/範囲/ステップ)はできるだけ同じ結果になるよう実装しているが、実運用で使う前には実機のsystemd-analyze calendar "式"でも確認することを推奨する。
関連ツール
最終更新・根拠の確認日: 2026-09-10 · カテゴリ: Linux・サーバー