systemdタイマー OnCalendar式解読・次回実行

OnCalendar=の書式(daily、Mon..Fri 09:00、*:0/15など)を解析し、次回5回の実行日時と対応するcron式を即座に表示。cron式からOnCalendar式への逆変換にも対応。

曜日
-
年
-
月
-
日
-
時刻
-
対応するcron式
-

次回5回の実行日時(この端末のローカル時刻)


    対応するOnCalendar式
    -

    本ツールは systemd-analyze calendar と同等の計算をブラウザ内だけで行うことを目指しています(実機での確認を推奨)。Persistent=true を設定すると、タイマーが停止していた間に実行時刻を過ぎていた場合は次回起動時に1回だけ実行されます。RandomizedDelaySec= は実行時刻に指定秒数以内のランダムな遅延を加え、多数のマシンが同時刻に負荷を集中させるのを避けるための設定です。

    使い方

    1. OnCalendar= の式(daily、Mon..Fri 09:00、*:0/15 など)を入力すると、曜日・年・月・日・時刻ごとの意味と、対応するcron式、次回5回の実行日時(ブラウザのローカル時刻)が即座に表示される。
    2. よく使う式はプリセットボタンから選べる。
    3. 下部の入力欄にcron式(分 時 日 月 曜日)を入れると、対応するOnCalendar式に逆変換される。
    4. 表現できない場合(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・サーバー