おっさんエンジニアの忘備録

Linux系の各種作業を自分用の忘備録として残しています

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直しちゃうとデグレードしちゃいますけどね^^;

もっと賢いやり方があるのかなぁ~?