cronで定期実行する基本|crontabの5つの欄の読み方、動かないときの原因と確かめ方
Linux や Mac でスクリプトを決まった時刻に自動で動かしたい人に向けて、cron と crontab の役割、分・時・日・月・曜日の5つの欄の書き方、よく使う指定の例、手で動くのに cron では動かない原因(PATH・カレントディレクトリ・%記号)、ログの残し方と重複実行の防ぎ方までをまとめました。

毎朝のバックアップ、毎時のデータ取得、月初めのログ整理のように、決まった時刻に決まった処理を動かしたい場面は意外と多くあります。Linux や Mac では、こうした定期実行を昔から「cron(クロン)」という仕組みが担ってきました。設定は一行で書けて、自宅のサーバーや小さな自動化にも手軽に使えます。
ただ、cron には「手で実行すると動くのに、cron に登録すると動かない」というつまずきがつきものです。ここでは、crontab の5つの欄の読み方と書き方、よく使う指定の例、動かないときの代表的な原因、ログの残し方と重複実行の防ぎ方までを、順に紹介します。
cron と crontab のしくみ
cron は、バックグラウンドで常に動いている「デーモン」と呼ばれるプログラムです。1分ごとに設定を確認し、その時刻に実行すべきコマンドがあれば実行します。
実行予定を書いた設定を crontab(クロンタブ)と呼びます。crontab は利用者ごとに持つことができ、各自の crontab に書いたコマンドは、その利用者の権限で実行されます。
利用者の crontab とシステムの crontab
crontab には大きく二種類あります。
| 種類 | 編集のしかた | 特徴 |
|---|---|---|
| 利用者の crontab | crontab -e で編集 | その利用者の権限で動く。実行ユーザーの欄はない |
| システムの crontab | /etc/crontab や /etc/cron.d/ のファイルを管理者が編集 | 時刻の欄のあとに実行ユーザーの欄がある |
個人の自動化なら、まずは利用者の crontab を使うのが基本です。システムの crontab は書式が一欄多く、利用者の crontab の書き方をそのまま貼ると動かないので注意します。
crontab の基本コマンド
利用者の crontab は、次のコマンドで扱います。
crontab -e:自分の crontab をエディタで開いて編集する。保存して閉じると反映される。crontab -l:自分の crontab の内容を表示する。crontab -r:自分の crontab を削除する。確認なしで消える環境が多いので、-eと打ち間違えないよう気をつける。
crontab のファイルを直接開いて書き換えるのではなく、crontab -e を使うのが正しい編集方法です。保存時に書式の確認が行われ、誤りがあれば知らせてくれる環境が多くあります。
crontab -rは-eとキーボード上で隣り合っていて、打ち間違えやすいコマンドです。編集する前にcrontab -l > ~/crontab.bakのように内容をファイルに保存しておくと、誤って消しても書き戻せます。
コマンドラインの操作に慣れていない場合は、先にターミナルとシェルの基本|ディレクトリ移動とファイル操作、パイプの考え方で、パスやリダイレクトの考え方を確認しておくと、この先の説明が読みやすくなります。
5つの欄の読み方
crontab の一行は、時刻を指定する5つの欄と、実行するコマンドでできています。欄の間は空白で区切ります。
分 時 日 月 曜日 コマンド
30 3 * * * /home/user/bin/backup.sh
上の例は「毎日3時30分に backup.sh を実行する」という意味です。
| 欄 | 取りうる値 | 意味 |
|---|---|---|
| 分 | 0〜59 | 何分に実行するか |
| 時 | 0〜23 | 何時に実行するか(24時間表記) |
| 日 | 1〜31 | 月の何日に実行するか |
| 月 | 1〜12 | 何月に実行するか |
| 曜日 | 0〜7 | 0と7が日曜、1が月曜…6が土曜 |

記号の意味
各欄では、数字のほかに次の記号が使えます。
*:すべての値。「毎分」「毎時」「毎日」などを表す。,:複数の値の列挙。0,30なら0分と30分。-:範囲。1-5なら月曜から金曜。/:間隔。*/10なら0分から10分おき。9-18/3のように範囲と組み合わせることもできる。
曜日や月には、多くの実装で mon や jan のような英語の略称も使えますが、数字で書いておく方が実装による違いを気にせずにすみます。










