cron(クロン)とは?
cron(クロン)は、LinuxなどのUNIX系OSで、スクリプトやコマンドをあらかじめ指定した日時に定期実行するためのデーモンプロセスです。バックアップの自動化、ログのローテーション、定期的なデータ同期など、サーバー運用において必須の機能です。
cronの設定は、通常 crontab コマンドを使って行います。設定ファイルには「いつ」「何を」実行するかを1行ずつ記述していきます。
cron設定の基本フォーマット(分 時 日 月 曜日)
cronの設定ファイル(crontab)には、左から順に5つの日時フィールドと、実行したいコマンドを空白区切りで記述します。
分 時 日 月 曜日 実行するコマンド
各フィールドで指定できる値の範囲は以下の通りです。
| フィールド | 指定できる値 | 説明 |
|---|---|---|
| 分 | 0〜59 | 何分に実行するか |
| 時 | 0〜23 | 何時に実行するか |
| 日 | 1〜31 | 何日に実行するか |
| 月 | 1〜12 | 何月に実行するか |
| 曜日 | 0〜7 | 何曜日に実行するか(0と7は日曜日) |
特殊な記号を使った指定方法
*(アスタリスク): 「すべて」を意味します。たとえば「月」が*なら「毎月」実行されます。,(カンマ): 複数の値を指定します。(例:0,30なら 0分と30分)-(ハイフン): 範囲を指定します。(例:1-5なら 1から5まで)/(スラッシュ): 間隔を指定します。(例:*/10なら 10ごと)
crontabコマンドでの設定方法
ユーザー個別のcronを設定・編集するには crontab コマンドを使用します。
設定を編集する(crontab -e)
crontab -e
このコマンドを実行すると、デフォルトのエディタ(viなど)が立ち上がり、cronの設定を編集できます。編集後に保存して終了すると、自動的に設定が反映され、デーモンの再起動などは不要です。
設定を確認する(crontab -l)
crontab -l
現在登録されているcronの設定内容を標準出力に表示します。編集前に現在の設定を確認する際によく使います。
【注意】設定を削除する(crontab -r)
crontab -r
現在のユーザーのcron設定をすべて削除します。確認プロンプトなしに消去されてしまうため、誤って -r を押してしまわないよう注意してください。
日常で使えるcron設定のサンプル表
よく使われる日常的なcron設定の記述例をまとめました。
| 実行タイミング | cronの記述例 |
|---|---|
| 毎日 夜20時00分 | 0 20 * * * /path/to/script.sh |
| 毎日 深夜3時30分 | 30 3 * * * /path/to/script.sh |
| 毎時 0分(1時間に1回) | 0 * * * * /path/to/script.sh |
| 毎分(1分に1回) | * * * * * /path/to/script.sh |
| 10分おき | */10 * * * * /path/to/script.sh |
| 毎週 月曜日の朝9時00分 | 0 9 * * 1 /path/to/script.sh |
| 毎月 1日の深夜0時00分 | 0 0 1 * * /path/to/script.sh |
ログ出力とメール通知の設定
cronを実運用する上で、実行結果のログを記録したり、不要なメール通知を停止したりする設定は非常に重要です。
ログをファイルに出力する
cronで実行されたコマンドの標準出力と標準エラー出力をログファイルに保存するには、リダイレクトを使います。
0 2 * * * /path/to/script.sh >> /var/log/cron_job.log 2>&1
>> で追記モードにし、2>&1 でエラー出力も同じファイルにリダイレクトしています。
メール通知をオフにする(捨てる)
cronは標準出力やエラー出力があると、デフォルトで実行ユーザー宛にメールを送信しようとします。これが不要な場合は、出力を /dev/null に捨てることでメール送信を防げます。
0 2 * * * /path/to/script.sh > /dev/null 2>&1
または、crontabファイルの先頭に以下のように記述することで、全体のメール通知を無効化することもできます。
MAILTO=""
cronが動かない場合の確認ポイント
設定したcronが期待通りに動かない場合は、以下の3点を確認してみてください。
- 絶対パスで記述しているか
cron実行時は通常のログイン時と環境変数(特にPATH)が異なります。コマンドやスクリプトへのパスは、省略せずに絶対パス(例:/usr/bin/python3)で記述するのが鉄則です。 - 実行権限(パーミッション)が付与されているか
実行するスクリプトファイルに実行権限がないとエラーになります。chmod +x /path/to/script.shで権限を付与してください。 - cronデーモンが起動しているか
OSによってはcron(またはcrond)サービスが停止している可能性があります。systemctl status cronまたはsystemctl status crondで状態を確認しましょう。

コメント