なぜ TIMER を CRON に変換するのですか?
systemd の .timer と cron ジョブはいずれもコマンドの定期実行をスケジュールするものであるため、systemd から移行する管理者は、同じスケジュールを .CRON 構文で表現したいと考えます。OnCalendar= のカレンダー式は、ほとんどの一般的なスケジュールにおいて、cron の「分・時・日・月・曜日」フィールドにきれいにマッピングできます。
TIMER から CRON への変換方法
crontab + 手動マッピング FREE
「crontab -e」を実行し、タイマーと一致する 5 つの時間フィールドを持つ行を追加します。例:OnCalendar=*-*-* 02:00:00 は 0 2 * * * /path/to/command になります。
systemd-analyze calendar FREE
cron フィールドに変換する前に、systemd-analyze calendar "*-*-* 02:00:00" を実行して、OnCalendar の値が次に実行される正確な時間を確認します。
これらの形式について
品質と注意点
- スケジュールのみが移行されます。コマンド、環境、ユーザーはペアとなる
.serviceファイルから取得し、自身で cron 行に追加する必要があります。 Persistent=(ダウンタイム後のキャッチアップ)、RandomizedDelaySec=、精度ウィンドウなどの systemd 独自の機能は cron には存在せず、失われます。- 1 分未満の精度や複雑な
OnCalendar式は、cron の分単位の 5 フィールド構文では表現できません。
よくある質問
自動の timer-to-cron コンバーターはありますか?
いいえ。
OnCalendar= スケジュールを cron フィールドに手動でマッピングし、必要に応じて systemd-analyze calendar や crontab.guru で検証します。cron 行のコマンドはどこから取得しますか?
タイマーが起動する、対応する
.service ユニット内の ExecStart= から取得します。「@daily」形式のスケジュールを変換するにはどうすればよいですか?
OnCalendar=*-*-* 00:00:00 は、cron の @daily または 0 0 * * * に相当します。実行できなかった分のキャッチアップは機能しますか?
いいえ。cron は、
Persistent=true が設定されたタイマーのように、逃した実行を再現することはありません。