Scientific Linux 6で自宅サーバー構築 番外編その1 Scientific Linux 6のcronについて
投稿者:yasu 更新日時:2011年3月10日 22時53分41秒カテゴリ:Linux, Scientific Linux, 自宅サーバー
今回はちょっと本題から外れてScientific Linux 6のcronについて。
cron(正確にはcrondか)っていうのは分時日月曜日を指定して自動でジョブを実行できるプロセスです。
当然の事ながらcronのサービスが動いていないと自動実行されません。
またanacronという(RHEL5系だとanacronプロセス、RHEL6系だとcronプロセスで制御されるもの)プロセスが動くと本来のジョブ起動時間でなくても逆算してジョブを遅延実行してくれます。
※anacronの事はyasuも今回調べて始めて知りました。
詳しくはこちら。
ITmedia エンタープライズ : Linux Tips「anacronデーモンって何?」
anacron - Wikipedia
このcronとanacronの初期設定がCentOS5(RHEL5系)とScientific Linux 6(RHEL6系)では異なるというものです。
明限突破: RHEL6 (7)cronとanacronで詳しい説明やフローが掲載されていて非常によくわかりました。
ジョブって今まで全然気にせず/rootディレクトリに置いてcronの設定をしてきましたが、/etcディレクトリにcron用のディレクトリもあるので、今後cron用ディレクトリにシェルスクリプトを配置したいと思います。
そもそもcronの設定ファイルは
/etc/cron.d
/etc/crontab
/var/spool/cron/ユーザ名 (←crontab -e)
の、3ヶ所あってyasuがよくやっているcrontab -eは/var/spool/cron/ユーザ名の設定ファイルを修正していたことになります。
で、CentOS5の/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
毎時1分に/etc/cron.hourly直下にあるシェルを自動実行する
毎日4時2分に/etc/cron.daily直下にあるシェルを自動実行する
毎週日曜日の4時22分に/etc/cron.weekly直下にあるシェルを自動実行する
毎月1日の4時42分に/etc/cron.monthly直下にあるシェルを自動実行する
という設定になっています。
またanacronは
# /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
/var/spool/anacron/cron.dailyファイルに記載された日付が現在時刻より1日以上前の場合、65分置きに/etc/cron.daily直下にあるシェルを再実行する
/var/spool/anacron/cron.weeklyファイルに記載された日付が現在時刻より7日以上前の場合、70分置きに/etc/cron.weekly直下にあるシェルを再実行する
/var/spool/anacron/cron.monthlyファイルに記載された日付が現在時刻より30日以上前の場合、75分置きに/etc/cron.monthly直下にあるシェルを再実行する
という設定になっています。
Scientific Linux 6の/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
自動実行の記載が一切ありません。
またanacronですが
# /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
/var/spool/anacron/cron.dailyファイルに記載された日付が現在時刻より1日以上前の場合、現在時刻が3時から22時の場合に5分+ランダム時間(0分から45分)置きに/etc/cron.daily直下にあるシェルを再実行する
/var/spool/anacron/cron.weeklyファイルに記載された日付が現在時刻より7日以上前の場合、現在時刻が3時から22時の場合に25分+ランダム時間(0分から45分)置きに/etc/cron.weekly直下にあるシェルを再実行する
/var/spool/anacron/cron.monthlyファイルに記載された日付が現在時刻より30日以上前の場合、現在時刻が3時から22時の場合に45分+ランダム時間(0分から45分)置きに/etc/cron.monthly直下にあるシェルを再実行する
という設定になっています。
明限突破ブログの管理人さんの見解ではRHEL6系は
1. cron.{daily|weekly|monthly} 以下に置いたファイルは、
実行時間が指定されていないため、いつ実行されるかわからない。2. 明示的に実行タイミングを指定したい場合は、
/etc/cron.d
/etc/crontab
/var/spool/cron (crontab -e)にて指定すること。
3. デフォルト登録されているログローテーション等の処理時間を固定化したい場合、crontabに実行時間を書くと、今までどおりの動作になる。
ということでした。
あとServer Worldさんのサイトでは
RHEL6 (互換である Scientific Linux 6 や CentOS 6 も同様) から、 デフォルトでは「cronie-anacron」というパッケージがインストールされ、 ジョブの定期実行は anacron で制御されるようになっています。 このため、cron のように決まりきった時間にジョブが実行されるわけではなく、 設定された時間内(3時-22時)に、ランダムに設定された時間分(0分-45分)待って実行されます。
これを従来通りの cron の設定に戻したければ、以下のように従来通りの cron 設定になっている「cronie-noanacron」をインストールしてください。 ただし、仮想環境においては、1台のマシン上で複数の仮想マシンが一斉に同じ時間に定期ジョブを実行する負荷も考える必要があるので、 仮想環境にしている場合は、各仮想マシンの cron 設定を手動で変更して時間をずらすか、 または、台数が多ければ一つ一つ設定を変えるのも大変なので anacron 制御のままにしておいた方がよいです。
とのことですので、cronie-noanacronのインストールとcronie-anacronのアンインストールをします。
[root@sl6 ~]# yum -y install cronie-noanacron
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package cronie-noanacron.x86_64 0:1.4.4-2.el6 set to be updated
--> Finished Dependency Resolution
Dependencies Resolved
=================================================
Package Arch Version Repository Size
=================================================
Installing:
cronie-noanacron x86_64 1.4.4-2.el6 sl 6.5 k
Transaction Summary
=================================================
Install 1 Package(s)
Upgrade 0 Package(s)
Total download size: 6.5 k
Installed size: 326
Downloading Packages:
cronie-noanacron-1.4.4-2.el6.x86_64.rpm | 6.5 kB 00:00
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : cronie-noanacron-1.4.4-2.el6.x86_64 1/1
Installed:
cronie-noanacron.x86_64 0:1.4.4-2.el6
Complete!
# cronie-anacronのアンインストール
[root@sl6 ~]# yum -y remove cronie-anacron
Setting up Remove Process
Resolving Dependencies
--> Running transaction check
---> Package cronie-anacron.x86_64 0:1.4.4-2.el6 set to be erased
--> Finished Dependency Resolution
Dependencies Resolved
=================================================
Package
Arch Version Repository Size
=================================================
Removing:
cronie-anacron
x86_64 1.4.4-2.el6 @anaconda-ScientificLinux-201103021619.x86_64/6 41 k
Transaction Summary
=================================================
Remove 1 Package(s)
Reinstall 0 Package(s)
Downgrade 0 Package(s)
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Erasing : cronie-anacron-1.4.4-2.el6.x86_64 1/1
Removed:
cronie-anacron.x86_64 0:1.4.4-2.el6
Complete!
cronie-noanacronをインストールしcronie-anacronをアンインストールすると/etc/anacrontabファイルがなくなりcron.daily、cron.weekly、cron.monthlyディレクトリ以下のシェルをランダムな時間で実行されなくなります。
/etc/cron.hourly/0anacronファイルもなくなります。
代わりに/etc/cron.d/dailyjobsというファイルができあがり、その中でrun-partsオプションでcron.{daily|weekly|monthly}ディレクトリ以下のシェルを実行するようになっているのでCentOSのように/etc/crontabに設定をする必要もありません。
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
余談ですが1時間置きに実行するシェルは元々/etc/cron.d/0hourlyに設定されています。
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
01 * * * * root run-parts /etc/cron.hourly
cronie-noanacronのインストールとcronie-anacronのアンインストールの影響か断言はできませんが、この作業をした次の日仕込んでいたcronが動いていませんでした。
調べてみるとcrondサービスが止まっていたのでサービスを再起動しました。
[root@sl6 ~]# ps aux |grep crond
# crondが起動していなかったので起動
root 12910 0.0 0.0 107368 900 pts/0 S+ 21:38 0:00 grep crond
[root@sl6 ~]# /etc/rc.d/init.d/crond start
crond を起動中: [ OK ]
■関連記事
Scientific Linux 6で自宅サーバー構築 その1 サーバー機Express 5800 GT110bのオンボードRAIDでRAID1設定
Scientific Linux 6で自宅サーバー構築 その2 Scientific Linux 6をExpress5800/GT110bにインストール
Scientific Linux 6で自宅サーバー構築 その3 Scientific Linux 6インストール後の初期設定
Scientific Linux 6で自宅サーバー構築 番外編その1 Scientific Linux 6のcronについて
Scientific Linux 6で自宅サーバー構築 その4 Scientific Linux 6 にClamAVをインストールしてウィルス対策
Scientific Linux 6で自宅サーバー構築 その5 Scientific Linux 6 にTripwireをインストールしてファイル改ざんを検知する
Scientific Linux 6で自宅サーバー構築 その6 Scientific Linux 6 にchkrootkitをインストールしてrootkit感染を検知する
Scientific Linux 6で自宅サーバー構築 その7 NTPサーバーで自動時刻合わせ
Scientific Linux 6で自宅サーバー構築 その8 バッファオーバーフロー攻撃対策を行う
Scientific Linux 6で自宅サーバー構築 その9 logwatchでサーバー監視
Scientific Linux 6で自宅サーバー構築 その10 DNSサーバーを構築
Scientific Linux 6で自宅サーバー構築 番外編その2 Scientific Linuxを6.0から6.1にアップグレードする
Scientific Linux 6で自宅サーバー構築 その11 PostfixとDovecotとSMTP-AUTHでメールサーバーを構築する
Scientific Linux 6で自宅サーバー構築 その12 メールサーバーにSSLを導入する
Scientific Linux 6で自宅サーバー構築 その13 Apache PHP MySQLをインストール
Scientific Linux 6で自宅サーバー構築 その14 WebサーバーにSSLを導入する
Scientific Linux 6で自宅サーバー構築 その15 WordPressを導入する
Scientific Linux 6で自宅サーバー構築 その16 Piwikでアクセスログ集計
Scientific Linux 6で自宅サーバー構築 その17 Squidをインストール
Scientific Linux 6で自宅サーバー構築 その18 sshで鍵認証を導入
Scientific Linux 6で自宅サーバー構築 その19 WebDavの設定
Scientific Linux 6で自宅サーバー構築 その20 lm_sensorをインストール

