指定した時間ピッタリにCronが実行されるにはどうしたら良いかを簡単に解説します。
RHEL6 (Scientific Linux 6 や CentOS 6 も同様) から、デフォルトでは「cronie-anacron」というパッケージがインストールされ、 ジョブの定期実行は anacron で制御されるように変更されました。そのため、Centos5の時のcron のように決まりきった時間にジョブが一斉に実行されるわけではなく、 設定された時間内(3時-22時)に、ランダムに設定された時間分(0分-45分)待って実行されるように変更されています。
Crontabの記載
Centos6系以降
—————————————————————————————————-
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
—————————————————————————————————-
Centos5系以前
—————————————————————————————————-
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
—————————————————————————————————-
ランダムに実行する設定は、anacron (cronie-anacron) により行われており、設定内容は /etc/anacrontab に記載されています。
ファイルの中身
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
—————————————————————————————————-
仮想マシンなどの運用を想定して負荷を分散するためだとおもいますが、決められた時刻にCRONを実行したい場合もあるかとおもいます。
cronie-noanacronパッケージのインストール+cronie-anacron削除
※パッケージの依存関係のため、事前に cronie-noanacron をインストールし、その後に cronie-anacron を削除するという順番で行います。
インストール後Cron の時刻設定については /etc/cron.d/dailyjobs にあるファイルを編集します。
yum -y install cronie-noanacron yum -y remove cronie-anacron
設定ファイルを編集する
vi /etc/cron.d/dailyjobs
—————————————————————————————————-
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # run-parts 02 4 * * * root [fusion_builder_container hundred_percent="yes" overflow="visible"][fusion_builder_row][fusion_builder_column type="1_1" background_position="left top" background_color="" border_size="" border_color="" border_style="solid" spacing="yes" background_image="" background_repeat="no-repeat" padding="" margin_top="0px" margin_bottom="0px" class="" id="" animation_type="" animation_speed="0.3" animation_direction="left" hide_on_mobile="no" center_content="no" min_height="none"][ ! -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
—————————————————————————————————-
※0anacron の存在チェックが行われており、cronie-anacron パッケージを削除しないと有効化されないようになっています。
こちらのファイルを編集することにより、従来と同様ジャストタイムにCRONを実行する事が出来ます。
[/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]