Logwatchをrpmでインストールして 、メールを携帯に飛ばして状態管理をしており、
CentOS6.0のマシンからも、メールを飛ばすようした際のオボエガキ。
CentOS6.0以降のcrontabはrootでも定義されていない。
crontabのdailyを7時半に定義したところ、
朝3時半頃と、指定した時間の2回送られてくるようになった。
All about linuxさん に解説があったので、残す。
何やら、anacron (cronie-anacron)によって、ランダム化をし、
スクリプトシェルが重なったりして実行できない等の問題を解決しているようだ。
/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
赤字の 1 (左端) が実行周期 (日時実行=1) で、
次の数字 5 は、実行開始タイミングになってから、5 分間の遅延を入れる指定
実行開始する時間帯は START_HOURS_RANGEで制御され、
3-22 とは、3時から22時までの範囲 (3:00 ≦ t < 22:00) を指定
ランダム化の幅はRANDOM_DELAY で制御され、
45 とは 0~45 分の範囲 (乱数計算の実装上、正確には 44 分まで)
でランダムに遅延を行うことを指定している。
とのこと。詳しくは、manにて
起動時間帯が、3-22時の場合は、3:05~3:50に(正確には3:06となるらしい)起動することになる。
7時半頃飛んで来ればいいので、
START_HOURS_RANGE=7-22
に変更。
これで、7時前半となる場合は、
1 5 cron.daily nice run-parts /etc/cron.daily
5を30とかにすれば、いいはず。
cronie-noanacronというパッケージをインストールすると、ランダム化されないそうだ。
パッケージの依存関係のため、事前に cronie-noanacron をインストールし、
その後に cronie-anacron を削除するという手順を踏む。
# yum install cronie-noanacron
..略..
Installed:
cronie-noanacron.x86_64 0:1.4.4-7.el6
Complete!
# rpm -e cronie-anacron
/etc/cron.d/dailyjobsというものが生成され、こいつに、見慣れたcromtabを指定すればよい。
中身
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
02 4 * * * root [ ! -f /etc/cron.hourly/0anacron ] && run-parts /etc/cron.daily
22 4 * * 0 root [ ! -f /etc/cron.hourly/0anacron ] && run-parts /etc/cron.weekly
42 4 1 * * root [ ! -f /etc/cron.hourly/0anacron ] && run-parts /etc/cron.monthly
cronie-anacron パッケージを削除しないと有効化されないようにガードされているそうだ。
cron.weekly および cron.monthlyも同様。