cron式ジェネレーター
実行したいタイミングを選ぶとcrontab用の式を生成します。逆に、手元のcron式を下の式欄に貼り付ければ日本語の意味と次回実行日時を確認できます。
※ 29〜31日を選ぶと、その日が存在しない月は実行されません
この欄は直接編集もできます(5フィールド: 分 時 日 月 曜日)
cronとは
cronはLinuxで定期実行を行う標準的な仕組みです。crontab -e で開いたファイルに「分 時 日 月 曜日 コマンド」の形式で1行書くと、指定したタイミングでコマンドが自動実行されます。各フィールドには *(すべて)、数値、1-5(範囲)、*/10(間隔)、0,30(列挙)が使えます。
ハマりやすいポイント
「日」と「曜日」の同時指定はOR条件。 「毎月1日かつ月曜日」のつもりで 0 9 1 * 1 と書くと、「毎月1日」と「毎週月曜」の両方で実行されます。これはcronの古くからの仕様です。
*/N は「起点からN間隔」ではなく「割り切れる値」。 例えば時フィールドの */7 は0時・7時・14時・21時に実行され、21時→翌0時の間隔は3時間になります。等間隔にしたい場合は割り切れる値(1, 2, 3, 4, 6, 8, 12)を選ぶのが安全です。
環境変数とPATHはログイン時と異なる。 cronから実行されるコマンドは最小限の環境で動くため、「手で打つと動くのにcronだと動かない」場合はコマンドをフルパスで書くのが定石です。
よくある質問
Q. 平日の朝9時だけ実行したい。
A. 0 9 * * 1-5 です(曜日は 0=日曜〜6=土曜。7も日曜として使えます)。
Q. 実行結果のログを残すには?
A. 0 3 * * * /path/to/backup.sh >> /var/log/backup.log 2>&1 のようにリダイレクトを付けます。2>&1 でエラー出力もまとめて記録されます。
Q. Windowsにはcronはない?
A. Windowsの定期実行は「タスクスケジューラ」が担当します。コマンドの対応関係は当サイトのLinux ⇄ PowerShell コマンド対訳表も参考にしてください。
Q. systemd timerとの違いは?
A. 新しいLinux環境ではsystemd timerが推奨されることもあります。ログ管理(journalctl連携)や実行漏れの追跡に強い一方、ファイルを2つ書く必要があり手軽さではcronに分があります。