少々変わった部分があるので注意が必要。
Table of Contents ================= 1 RHEL5の設定ファイル 2 RHEL6の設定ファイル 3 RHEL5と6の違い 4 何が起きるか? 5 そもそもanacronとは 6 RHEL6のanacrontab 7 RHEL6のcron/anacron の関係図解 8 なんでこんな設定になっているか? 9 RHEL6 cron/anacron 注意事項まとめ
1 RHEL5の設定ファイル
^^^^^^^^^^^^^^^^^^^^^^
[root@station1 ~]# ps -ef |grep cron root 1962 1 0 19:15 ? 00:00:00 crond root 2008 1 0 19:15 ? 00:00:00 anacron -s [root@station1 ~]# chkconfig --list |grep cron anacron 0:off 1:off 2:on 3:on 4:on 5:on 6:off crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off [root@station1 cron.daily]# cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # run-parts 01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly [root@station1 cron.daily]# cat /etc/anacrontab # /etc/anacrontab: configuration file for anacron # See anacron(8) and anacrontab(5) for details. SHELL=/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root 1 65 cron.daily run-parts /etc/cron.daily 7 70 cron.weekly run-parts /etc/cron.weekly 30 75 cron.monthly run-parts /etc/cron.monthly
2 RHEL6の設定ファイル
^^^^^^^^^^^^^^^^^^^^^^
[root@localhost cron.hourly]# ps -ef |grep cron root 1339 1 0 19:00 ? 00:00:00 crond root 1417 1 0 19:01 ? 00:00:00 /usr/sbin/anacron -s [root@localhost cron.hourly]# chkconfig --list |grep cron crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off [root@localhost cron.d]# cat /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 # | | | | | # * * * * * command to be executed [root@localhost cron.d]# cat /etc/anacrontab # /etc/anacrontab: configuration file for anacron # See anacron(8) and anacrontab(5) for details. SHELL=/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # the maximal random delay added to the base delay of the jobs RANDOM_DELAY=45 # the jobs will be started during the following hours only START_HOURS_RANGE=3-22 #period in days delay in minutes job-identifier command 1 5 cron.daily nice run-parts /etc/cron.daily 7 25 cron.weekly nice run-parts /etc/cron.weekly @monthly 45 cron.monthly nice run-parts /etc/cron.monthly
3 RHEL5と6の違い
^^^^^^^^^^^^^^^^^
RHEL5まではcron.{daily|weekly|monthly} 以下の実行スクリプトは、crontabにて指定された時間に実行されていたが、RHEL6からは全てanacron配下に置かれている。
そのほか、RHEL5でanacronは個別のサービスとして登録されていたが、RHEL6ではcronによって制御されている。
4 何が起きるか?
^^^^^^^^^^^^^^^^^
この設定によってRHEL6で何が起きるかと言うと、cron.{daily|weekly|monthly} 以下におかれたスクリプトが「何時に実行されるかわからなくなる」。
特にログローテーションなんかは、RHEL5では毎日04:02に起動されていたが、RHEL6ではその時間に起動されない。
んじゃ、いつ実行されるのって事で、詳しくanacronの動きを調べてみることにする。
5 そもそもanacronとは
^^^^^^^^^^^^^^^^^^^^^^
crondをサポートするような機能。
crondは起動すると一分おきにcrontabを見に行って、起動条件に合致するものがあればそれを実行する。しかし、crondが起動していない時間は無視されてしまう。
例えば、毎日 23:00 にあるバッチを起動しているとする。何かの理由で 22:55~23:05の間、サーバをメンテナンス等で止めたとする。
この場合、当然ながらバッチは起動されない。これはこれで正しい動作なのだが、それでは困る場合にanacronへ設定を入れておくことでシステム起動後にバッチを遅延起動させる事ができる。
なので、上の設定を見るとRHEL5まではcronで実行されなかった場合、anacronで実行させるという設定になっていることが分かる。
RHEL5/crontab 02 4 * * * root run-parts /etc/cron.daily RHEL5/anacrontab 1 65 cron.daily run-parts /etc/cron.daily設定の意味:
1カラム目:何日おきに実行するか?
2カラム目:1カラム目で指定された期間実行されていなかった事を検知した場合、次に処理を実行する場合の遅延時間
3カラム目:識別子 /var/spool/anacron 以下のこの名前のファイルが作成される。anacronは処理を実行するとこのファイルに実行された日付を書き込む
4カラム目:実行する処理
この辺りに詳細に書いてある。
http://www.itmedia.co.jp/help/tips/linux/l0560.html
http://www.jp.redhat.com/manual/Doc9/rhl-cg-ja-9/s1-autotasks-anacron.html
6 RHEL6のanacrontab
^^^^^^^^^^^^^^^^^^^^
RHEL6のanacrontabは以下のようになっているので、
# the maximal random delay added to the base delay of the jobs RANDOM_DELAY=45 # the jobs will be started during the following hours only START_HOURS_RANGE=3-22 1 5 cron.daily nice run-parts /etc/cron.daily 7 25 cron.weekly nice run-parts /etc/cron.weekly @monthly 45 cron.monthly nice run-parts /etc/cron.monthlycron.daily は 以下の条件で起動される。
1. anacronが起動されたタイミングで
2. /var/spool/anacron/cron.daily に記載された日付が、現在時刻より1日以上前の状態で
3. 3-22時の場合に
4. 遅延5分+ランダム時間(0-45分)待った後に実行される。
*anacronはcron.houry経由で1時間おきに起動される。
7 RHEL6のcron/anacron の関係図解
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
標準インストール後の状態を図にまとめてみた。
8 なんでこんな設定になっているか?
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
当然ながらなんでこんな設定になったかは理由がある。
聞いた話では、RHEL6は仮想環境で動かされる(ゲストとして稼働する)事を強く意識しており、
同一ホストで複数のRHELが動いている場合に、同じ時間に一斉にログローテーションが走る事を避けるため(らしい
同じような仮想化環境下での負荷軽減の仕組みとして、Tickless という割り込み頻度を下げる仕組みも導入されている。
参考>> http://cloud.watch.impress.co.jp/docs/column/virtual/20101129_409089.html
9 RHEL6 cron/anacron 注意事項まとめ
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1. cron.{daily|weekly|monthly} 以下に置いたファイルは、
実行時間が指定されていないため、いつ実行されるかわからない。
2. 明示的に実行タイミングを指定したい場合は、
/etc/cron.d
/etc/crontab
/var/spool/cron (crontab -e)
にて指定すること。
3. デフォルト登録されているログローテーション等の処理時間を固定化したい場合、crontabに実行時間を書くと、今までどおりの動作になる。
0 件のコメント:
コメントを投稿