crontabで定期作業を行う

muroiです。
最近はブログを書く時にしかEmacsを起動しなくなってきたので少しずつ操作を忘れてきているような気がします。
ブログを書く時はEmacs、コーディングにはEclipse、サーバでファイルを開く時はvimといった感じで使用していました。
少ないファイルを扱う際にはEmacsでコーディングした方がいいのですが、symfony等ファイル数が多い場合はEclipseの方が便利です。

さて、ここまでは余談として、今回は決まった時間に指定しておいた処理を行ってくれるcrontabについて学習したのでその事を書きたいと思います。

【crontab】

このコマンドは、Unix系OSにおいてコマンドの定時実行のスケジュールを行うために用いられるコマンドです。(Wikipedia参照)
実行するジョブの事をまとめてcron jobと言います。

【crontabを設定する】

crontabを設定するにはshellで以下のコマンドを利用します。

crontab -e    crontabを編集する。
crontab -l    現在設定されているデータを表示する
crontab -r    設定されているデータを解除(削除)する

設定ファイル書式は、順番に「分、時間、日、月、曜日、コマンド名」で書きます。
この書式で複数の実行ジョブを記述する事ができます。

例1: 34 12 * * * php hoge.php
上記のように記述すると12:34にhoge.phpが実行されるという訳です。

例2: /5 * * * * php hoge.php
上記のような記述では5分おきにhoge.phpが実行されます。色々な書き方があるみたいですね。

他にも、曜日指定の所に「1-6」を指定すれば月曜日から土曜日まで実行といった形にもできます。

【crontabを使う上での注意点】

ファイルの指定なども相対パスで記述するのではなく絶対パスで記述した方が予期せぬ間違いも減らす事ができます。
上記の事を意識して、実際にそのコマンドが動作するか確かめてから記述する事が失敗を減らす事につながりますね。


このcrontabコマンドを設定しておく事で、定期的にログをとったり深夜にバッチ作業を行ったりしているそうです。
今までどうやっているのかなと思っていたのですが、このコマンドを使う事で解決できるんだという事を知り、納得ができました。
さすがに夜まで誰かが待って時間になったら実行してるっていう訳ではなかったのですね・・(笑)

4 件のコメント so far »

  1. by sasimi, on 10.09.08 @ 5:36 PM

     

    cronでバッチを走らせる場合は多重起動しないよう注意が必要です。

  2. by sasimi, on 10.09.08 @ 5:37 PM

     

    たとえば、1分以内に終わる(はず)の処理を5分おきに走らせる設定をした場合、たまたまアクセス集中などで5分たっても終わらなかった場合は2つ目が、さらに5分後に3つ目が・・・といったように同時に複数の処理が走りさらにサーバ負荷が上がるといったことにつながります。

  3. by sasimi, on 10.09.08 @ 5:40 PM

     

    そもそもバッチ処理は同時に複数のバッチが走ると困る(想定していない)場合が多いので、多重起動しないようチェックする仕組みが必要です。さて、どうやって実現したらよいでしょう?

  4. by muroi, on 10.11.08 @ 10:01 AM

     

    >sasimiさん
    コメントありがとうございます。
    多重起動しないように注意する・・・全然気づきませんでした。
    setlockコマンドについても勉強してみたいと思います。

Comment RSS · TrackBack URI

コメントをどうぞ

名前: (Required)

eMail: (Required)

Website:

Comment:

Spam Protection by WP-SpamFree