2011/07/30

crontabで抜かりなく実行する

crontabは、サーバーサイドプログラミングには付いて回るものなので、備忘録も兼ねてまとめます。




まずは書式

とりあえずはどうやってスケジュールを組むかという事で、crontabを起動させます。とりあえずは、今ログインしているユーザーのスケジュールを確認してみます。
crontab -l

現在設定されているスケジュールが出てきます。もしかするとスケジュールが設定されていなくて表示されない可能性もありますが。

次は実際にcrontabを書いてみます。書く時は
crontab -e

で編集モードへ。だいたいは「vi」や「vim」で起動すると思いますが、一度「pico」というエディタが立ち上がってテンパった事がありますのでbashrcあたりの設定を確認してください。

crontabは指定した時間に指定したプログラムを実行させるものなので、時間とプログラムを1行で書きます。
*    *    *    *    *    echo "test" >> /home/ystream/test.txt

簡単な例ですが、上の例の意味は、「1年365日1分も休むこと無く毎分"test"って吐き続けやがれ」ということです。その結果が「/home/ystream/test.txt」に蓄積されていきます。

時間の指定は5つある「*」で表します。だいたいタブを区切り文字として利用しますがスペースでも構わないようです。
5つの「*」はそれぞれ、「分」「時」「日」「月」「曜日」を示します。

毎時5分に実行 5       *       *       *       *       echo "test"
5分毎に実行 */5     *       *       *       *       echo "test"
日曜の夜中3時5分に実行 5       3       *       *       0       echo "test"
月末の夜中4時0分に実行 0       4       1       *       *       echo "test"
毎日10時から22時の間で
2時間に1回実行
0       10-22/2 *       *       *       echo "test"
毎月5日、10日、15日の
昼12時5分に実行
5       12      5,10,15 *       *       echo "test"

エディタを保存すると、crontabの内容が保存され、スケジュールが開始されます。

また、crontabでプログラムを実行させる時に、日付を引数として取りたい時があります。
5    4    *    *    *    /home/ystream/test.sh `date +'%m%d'`

これはエラーです。dateの使い方は正しいですが、「%」はcronにとって特別な記号のようです。
5    4    *    *    *    /home/ystream/test.sh `date +'\%m\%d'`

と「¥」でエスケープします。bashなどの実際に実行されるプログラムの中で日付を取得する方がスマートかなと思います。

crontabで手抜きでも抜かりはないシステムライフを!


0 件のコメント:

コメントを投稿