liunx環境における定期処理の実行(crontab)

毎日02:00時にDBのバックアップを取得することや、1時間毎にメモリ使用量をログに書き出すなど定期的に処理を実行させたいことが多々あります。
それを実現するために使用するのが「crontab」。詳しくはこちら->wikipedia:crontab
設定する機会があったためメモ。
OS=CentOS Ver5
user=hogeuser

ファイル作成

実行ファイルの配置場所は下記ディレクトリ。

/var/spool/cron

その中にcronを実行するユーザー名でファイルを作成。

  • 操作中のユーザーで作成する場合のコマンド
#crontab -e

編集する場合も同様。

  • 別ユーザーのファイルを作成する場合。
#crontab -u ユーザー名 -e

-u オプションで指定したユーザーの設定ファイルを作成。
編集する場合も同様。

上記コマンドを実行するとテキストエディター(vi)が起動。
実行ファイルの書式は

分 時 日 月 曜日 コマンド

各項目の指定内容は下記。
分:0〜59
時:0〜23
日:1〜31
月:1〜12 もしくは jan〜dec
曜日:0〜7 [0と7は日曜日] もしくは sun〜sat

例)cronファイル

MAILTO=""
30 9,23 * * * /home/hogeuser/logs/sar.sh
0 0-23  * * * /home/hogeuser/logs/free.sh
30 10 * * * echo `free` >> /home/hogeuser/logs/free/free_log
MAILTO=""
#cronを設定したユーザーに対して実行のたびにメールが送信されるので、それを行わないようにするための設定。
#分 時   日 月 曜日 コマンド
30  9,23 *  *  *    /home/hogeuser/logs/sar.sh
#毎日、9:30と23:30に/home/hogeuser/logs/sar.shを実行する設定。
#「30」で分を指定、「9,23」で時間を指定。日、月、曜日は未指定なので毎日実行される。
0 0-23  * * * /home/hogeuser/logs/free.sh
#「0-23」で0時〜23時までの各時間を指定。
#毎時/hoge/hogeuser/logs/free.shを実行する設定。上記同様、毎日実行される。
30 10 * * * echo `free` >> /home/hogeuser/logs/free/free_log
#ファイル内にコマンドを書くこともできる。

以上でcronの設定が終了、次はcronの動作を確認。

cronのログファイル

/var/log/cron

このファイルを参照することで作成したファイルが読み込まれているか、コマンドが実行されているか確認できる。
例)ファイルの保存時間が「10:22」実行時間が「10:30」の場合

Mar 21 10:22:22 localhost crontab[5050]: (hogeuser) END EDIT (hogeuser)(*1)
Mar 21 10:23:01 localhost crond[5255]: (hogeuser) RELOAD (cron/hogeuser)(*2)
Mar 21 10:30:01 localhost crond[5264]: (hogeuser) CMD (free)(*3)

(*1)cronファイルの編集が終了。
(*2)編集されたcronファイルの読み込み。
ファイルが読み込まれるのは編集終了時間の次分の頭。
ここでは10:22にファイルが保存されたので、次の10:23の頭でファイルが読み込まれている。
(*3)指定した時間にコマンドが実行。

Memo
動作確認をする場合、設定ファイルを保存した時間から実行までの時間を3分程度見積もる必要がある。
でないと、ファイル読み込みと処理実行との折り合いが付かず正しく実行されない場合がある。