検索

カレンダー

2011年3月
« 2月   4月 »
 123456
78910111213
14151617181920
21222324252627
28293031  

広告

ブログランキング・にほんブログ村へ
にほんブログ村

東電電力供給情報

カテゴリー

最近のコメント

リンク

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の記載は

[root@centos ~]# 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

毎時1分に/etc/cron.hourly直下にあるシェルを自動実行する
毎日4時2分に/etc/cron.daily直下にあるシェルを自動実行する
毎週日曜日の4時22分に/etc/cron.weekly直下にあるシェルを自動実行する
毎月1日の4時42分に/etc/cron.monthly直下にあるシェルを自動実行する
という設定になっています。

またanacronは

[root@centos ~]# 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

/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には

[root@sl6 ~]# 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

自動実行の記載が一切ありません。

またanacronですが

[root@sl6 ~]# 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

/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のアンインストールをします。

# cronie-noanacronのインストール
[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に設定をする必要もありません。

[root@sl6 ~]# cat /etc/cron.d/dailyjobs
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に設定されています。

[root@sl6 ~]# cat /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サービスが止まっていたのでサービスを再起動しました。

# 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をインストール

“Scientific Linux 6で自宅サーバー構築 番外編その1 Scientific Linux 6のcronについて”にコメントはありません

コメントする