Linux Cron(クーロン)

最終更新日

Cronとは

cron とは、ジョブ(スクリプト)を自動実行するためのデーモンプロセスです。
そして、Linux システムの管理を行なう場合、ログのローテートや、バックアップなど、定期的に自動実行したいジョブが数多くあります。
特に、バックアップなどは、システムへの負荷が大きいため、通常は、ユーザからのアクセスが少ない、深夜や早朝に行なわれます。

このcronは,各ユーザーごとに設定することができるが,あらかじめシステム側でスケジュールされているものもある。
その大元となる設定ファイルが「/etc/crontab」

crontabコマンド辞典

設定ファイル

ファイル/ディレクトリ利用者主な用途
/var/spool/cron/user全ユーザユーザの自動タスク設定ファイル
/etc/crontabroot毎時、毎日、毎月、毎週の自動タスクのメイン設定ファイル
/etc/cron.hourlyroot毎時実行される自動タスク設定ファイルを置くディレクトリ
/etc/cron.dailyroot毎日実行される自動タスク設定ファイルを置くディレクトリ
/etc/cron.monthlyroot毎月実行される自動タスク設定ファイルを置くディレクトリ
/etc/cron.weeklyroot毎週実行される自動タスク設定ファイルを置くディレクトリ
/etc/cron.droot上記以外の自動タスク設定ファイルを置くディレクトリ

ディレクトリ下にはシステム動作に密接なスクリプトが用意されている。
それぞれ毎時,毎日,毎週,毎月ごとのスケジュールで実行されるのだ。

一般ユーザー権限であれば「crontab -e」を実行してcron設定をするが,
システムに関わる制御であれば,この「/etc/crontab」やその中で定義される「/etc/cron.*/」ディレクトリ下に設定を記述するのが一般的だ。

crontab -e

crontab -eでのcron編集をはとてつもなく危ない方法

crontabコマンド

crontabファイルには、指定した日時や定時に実行するコマンドやスクリプトが記録されています。
スケジュールされたコマンドやスクリプトは、
cronデーモンと呼ばれるバックグラウンドで動いているプログラムによって実行されます。

オプション
-ecrontabファイルの編集を行います。環境変数EDITORで指定されているエディタが起動します。
-lrontabファイルの内容を表示します。
-rcrontabファイルを削除します。
コマンドを実行すると否応なし(削除しますか?といった対話はありません)にcrontabファイルが削除されるので実行には注意が必要です。
-u指定したユーザーのcron設定を行います。rootのみが使用できるオプションです。

シェルの自動実行例

$ crontab -e
*/1 * * * * sh /home/suna/sh/mydns.sh

「:wq!」と入力して、保存して終了します。

実行状況は、/var/log/cronをtailコマンドで実行状態を確認します。

$ tail -f /var/log/cron 

ファイル内容

#!/bin/sh
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
  
COMMAND=logger cron.d-test
  
*/3 * * * * root $COMMAND
*/15 * * * * root $COMMAND
18 * * * * root $COMMAND
環境変数説明
SHELLcronで使用されるシェルを設定します。
PATHcronに教えるパスの設定します。ここで設定されていないパス上にあるコマンド等を実行させる場合は、フルパスでコマンド等を設定する必要があります。
MAILTOcronの実行結果を送るユーザまたはメールアドレスを指定します。メールを送信したくない場合は「MAILTO=”“」と設定します。
HOMEcronが実行されるカレントディレクトリとなります。

書式

crontabの書式は、以下のように「分」「時」「日」「月」「曜日」「コマンド」を半角スペースで区切って指定します。
行頭に「#」が記載された行は、コメントになります。

1桁、あるいは2桁の数字(0〜59)。ワイルドカード(*)を指定すると毎分
1桁、あるいは2桁の数字(0〜23)。ワイルドカード(*)を指定すると毎時。
1桁、あるいは2桁の数字(1〜12)。または、3文字のテキスト(jan、decなど)。ワイルドカード(*)を指定すると毎月。
曜日1桁の数字(0〜7)、0と7は日曜日。または、3文字のテキスト(sun、monなど)。ワイルドカード(*)を指定すると毎日。
コマンドやスクリプト実行するコマンドやスクリプトを指定。

日時の指定には「リスト」「範囲」「共存」「間隔」といった指定方法も可能です。

リスト1,3,8「月」を指定した場合、1月、3月、8月に実行します。
範囲10-12「時」を指定した場合、10時、11時、12時に実行します。
共存3,5,50-52「分」を指定した場合、3分、5分、50分、51分、52分に実行します。
間隔*/5「分」を指定した場合、5分間隔に実行します。