2015年3月17日火曜日

cron(anacron)について確認した時のメモ

このエントリーをはてなブックマークに追加 はてなブックマーク - cron(anacron)について確認した時のメモ

ドキュメントの全くないサーバーで定期処理(cronやanacron)を調べるときに知らないことが多く、苦労したのでメモ

確認シェル作ってみた

cron(anacron含む)はとにかく書き方が色々ありすぎて、どこに何が書いてあるか分からないので、一覧である程度出すものを作りました。

知らないサーバーに入ってcronで何をやっているか把握するときはこれを使うとだいたいの内容が分かるはず!

  • /etc/crontabの内容を出力
  • /var/spool/crontab/[user-name]の内容を出力
  • /etc/cron.d/“ ”/etc/cron.hourly/“ ”/etc/cron.daily/“ ”/etc/cron.weekly/“ ”/etc/cron.monthly/

実行するとこんな感じです。

**************/etc/crontab****************
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

***********************************

**************/var/spool/cron/ec2-user****************
0 * * * * echo "hello" >> /tmp/hello
***********************************

**************/var/spool/cron/root****************
0 * * * * echo "hello" >> /tmp/hello
***********************************

**************/etc/cron.d/****************
0hourly  raid-check  update-motd
***********************************

**************/etc/cron.hourly/****************
0anacron  test
***********************************

**************/etc/cron.daily/****************
logrotate  man-db.cron  tmpwatch
***********************************

**************/etc/cron.weekly/****************
***********************************

**************/etc/cron.monthly/****************
***********************************

結局どうするのが良さそうか

  • 正確な時間でやりたい場合にはcron
  • daily以上の処理でかつ処理の依存関係がないものや実行時間にバラツキをもたせたい場合にはanacron。例えばバッチ実行した処理結果をDBに書くなどの場合にバッチ実行サーバーが多くあるとある時間帯に一斉にDB書き込みが走るのでそれを分散させる場合など。/etc/rc.d/hourlyはanacronではない点は注意
  • 内容にもよるがcronの設定をする場合、/etc/cron.d/配下にファイルを置くやり方の方がファイルを分けることができ、crontab -rを押して内容を消してしまう恐れもないのでベターだと思う
  • ユーザー毎に設定するものはcrontab -eで設定する(事前にバックアップはとる事)
  • cronの標準出力や標準エラー出力は捨てずにログに出力すること

記述の仕方

  • /etc/crontabに記載
  • crontab -eコマンドを使う
  • /etc/cron.d/配下にファイルを配置
  • anacronを使う

/etc/crontabに記載する

  • /etc/crontabファイルに記載した内容を定期実行する

crontab -eコマンドを使う

/etc/cron.d/配下にファイルを配置

  • /etc/cron.d/配下にファイルを置いておくと指定された時間に処理を実行する
  • crontabと違ってサービス(アプリ)ごとにファイルを分けることができるので見やすくできる
  • 後述するanacronのhourly設定のような/etc/cron.hourlyのジョブは/etc/cron.d/0hourlyによって実行されており、anacronの特徴である遅延処理などがない。デフォルトの場合、毎時0分に実行されるようになっている

anacronを使う

  • RHEL 6のジョブスケジューラ「anacron」とは Part1
  • /etc/cron.daily, /etc/cron.weekly, /etc/cron.monthly配下にファイルを置いておけば定期的に処理を実行する
  • cronと違い、正確に実行時間を指定できない(3時から5時のいつかのタイミングで実行などのレンジ指定は可能)
  • 設定内容は/etc/anacrontabに記載

0 件のコメント:

コメントを投稿