RHEL6(CentOS6)でcron復旧
以前にこんな出来事がありました。
同僚「あの~、サーバのcron設定が全部消えちゃったみたいなんですけど。。。。」
私「ん?ちょっと見てみますね(そんなことないだろうな。たぶん何か勘違いなんだろう。。。」
実際にサーバにログインして「# crontab -l」コマンド叩いてみると、
ほんとに設定が消えてる!!ヽ(゚Д゚;)ノ!!
私「な、なんかコマンド実行しました?^^;」
同僚「crontabのオプションで-rオプション付けて実行しました。」
工工工エエエエエエェェェェェェ(゚Д゚)ェェェェェェエエエエエエ工工工
とそんなときにやったことを残しておきます。
復旧方法
/var/log/cronには以下のようにcronの実行内容が出力されています。
May 15 06:00:01 host1 CROND[702]: (root) CMD (/usr/bin/php /hoge/silent_push.php 60 >/dev/null 2>&1) May 15 06:00:01 host1 CROND[703]: (root) CMD (perl /hoge/process_check.pl >> /tmp/process_check.log 2>&1 &) May 15 06:00:01 host1 CROND[701]: (root) CMD (/usr/lib64/sa/sa1 1 1) May 15 06:00:01 host1 CROND[710]: (root) CMD (/bin/bash -l service nagios restart > /tmp/nagios_restart.log 2>&1) May 15 06:00:01 host1 CROND[706]: (root) CMD (/usr/bin/php /hoge/android99_push.php >/dev/null 2>&1) May 15 06:01:01 host1 CROND[1902]: (root) CMD (run-parts /etc/cron.hourly) May 15 06:01:01 host1 run-parts(/etc/cron.hourly)[1902]: starting 0anacron May 15 06:01:01 host1 run-parts(/etc/cron.hourly)[1911]: finished 0anacron May 15 06:05:01 host1 CROND[13744]: (root) CMD (perl /hoge/process_check.pl >> /tmp/process_check.log 2>&1 &) May 15 06:10:01 host1 CROND[25976]: (root) CMD (/usr/lib64/sa/sa1 1 1) May 15 06:10:01 host1 CROND[25977]: (root) CMD (perl /hoge/process_check.pl >> /tmp/process_check.log 2>&1 &) May 15 06:15:01 host1 CROND[5788]: (root) CMD (perl /hoge/process_check.pl >> /tmp/process_check.log 2>&1 &) May 15 06:20:01 host1 CROND[18551]: (root) CMD (perl /hoge/process_check.pl >> /tmp/process_check.log 2>&1 &) May 15 06:20:01 host1 CROND[18550]: (root) CMD (/usr/lib64/sa/sa1 1 1) May 15 06:25:01 host1 CROND[30763]: (root) CMD (perl /hoge/process_check.pl >> /tmp/process_check.log 2>&1 &) May 15 06:30:01 host1 CROND[10669]: (root) CMD (perl /hoge/process_check.pl >> /tmp/process_check.log 2>&1 &) May 15 06:30:01 host1 CROND[10671]: (root) CMD (/usr/lib64/sa/sa1 1 1)
この情報をもとに実行間隔と実行コマンドを見たうえでcronに書いて復旧させました(地味^^;)。
これってもっと簡単に復旧できる方法ってあるんですかね??
再発防止策
以後はcronを更新する際は専用のファイルを更新し、それをcrontabコマンドで読み込む運用にしました。
# touch /hogehoge/crontab.bak # vi /hogehoge/crontab.bak # rrdファイル作成 38 * * * * perl /hoge/rrdfile_create.pl >/dev/null 2>&1 # rrdファイル更新 31 * * * * sh /hoge/rrdupdate.sh > /dev/null 2>&1 # 速度データ更新 8 * * * * sh /hoge/check_speed.sh >> /tmp/check_speed.log 2>&1 # 速度データをDBに登録 10 2 * * * sh /hoge/create_speed_data.sh >/dev/null 2>&1 # crontab /hogehoge/crontab.bak
これであればcronが消えても復旧はできるかなと。
このファイルを無視してcron直しちゃうとデグレードしちゃいますけどね^^;
もっと賢いやり方があるのかなぁ~?