cron「55 23 28-31 * *」の意味と書き方

毎月28・29・30・31日の23時55分に実行します。

この式の意味

毎月28・29・30・31日の23時55分に実行します。

式の分解

フィールド意味
5555分
2323時
28-3128日・29日・30日・31日
*毎月
曜日*すべての曜日

この式がよく使われる場面

月末締め処理に使われます。標準cronには「月末」の指定がないため、28〜31日に毎日起動し、スクリプト側で「翌日が1日かどうか」を判定するのが定番の書き方です。

実行される時刻の例

2026年1月1日以降の実行例です。

1回目2026/01/28(水)23:55
2回目2026/01/29(木)23:55
3回目2026/01/30(金)23:55

つまずきポイント

  • 存在しない日付(2月30日など)は自動的にスキップされるため、28-31指定でも安全です。
  • 判定の例: [ "$(date -d tomorrow +\%d)" = "01" ] && コマンド (翌日が1日のときだけ実行)
  • crontabに直書きする場合、%は「\%」とエスケープが必要です(エスケープしないと%以降が標準入力扱いになりコマンドが動きません)。長くなる場合はスクリプトファイルに切り出すのが安全です。
  • 「date -d tomorrow」はGNU date(Linux標準)用です。macOS/BSDでは「date -v+1d +\%d」を使います。

この式を試す・編集する

下のツールにこの式が入っています。数値を変えると、意味と次回実行時刻がその場で更新されます。

ドロップダウンで組み立てる(クリックだけでcron式を作成)

各項目を選ぶと、上の式が自動で更新されます。「毎」のままの項目は現在の式を維持します。

次に実行される時刻

※ 時刻はお使いの端末のローカルタイムで計算しています。

cron式の5つのフィールド

cron式は左から「分・時・日・月・曜日」の5つの値で指定します。*は「毎」、*/5は「5ごと」、1-5は範囲、1,3,5は列挙を表します。曜日は0=日曜〜6=土曜(7も日曜)です。