BLOGTIMES
» ArchiveList (Tag for "sh / ruby" )
«Prev || 1 · | Next»
2009/11/21

crontab -r とやってしまった時の対処法

linux  sh  ruby 

cronの設定を変えようと crontab -e と打とうとして、間違って crontab -r と打ってしまい、cronの設定が根こそぎぶっ飛んで参りました。「eとrは隣同士だから不慮の事故ですよ!」という他人の言い訳は以前から良く聞いていて、心の中で「そんなことあるかよ!」と思っていましたが、まさか自分がやってしまうとは思いませんでした。まったく言い訳できません

そして、こういう事故は絶対やってはいけないアカウントでやってしまうのが世の常。今回も例に漏れずたくさんジョブが仕込んであるアカウントでやってしまいました。しばし茫然自失。気を取り直してなんとかしようと考え始めたものの、さすがにこれを記憶に頼って復旧させるのは至難のワザ・・・・・・というかぶっちゃけ無理。適当に復旧してちゃんとバッチが動かずに、後日障害で呼び出されるものイヤです。

済んでしまったことでくよくよしていても仕方が無いので、手動での復旧はあきらめ、/var/log/cron の実行ログからcrontabをサルベージする*1スクリプトを書いてみました本当は時刻の設定とかも復元できるようにしようかと思ったのですが、まぁそんなにお世話になることもないのでそのあたりは手動で実施するということにします。いちおうリストアップされるようにしました。ユニークに出力する(*/5みたいに綺麗に畳んだりできない)ので出力は結構冗長ですが、そこは勘弁してください。

$ ./cron_salvage.rb --help Usage: cron_salvage [options] -f, --file CRONLOG cron log file (default: /var/log/cron) -u, --user USER cron user (default: root)

こんな感じで、対象のログファイルとユーザーが指定できるようにしてみました。
/var/log/cronが読める必要があるので、基本的にはrootユーザーで実行する必要があります。

$ ./cron_salvage.rb * * * * * /usr/lib/sa/sa1 1 1 * * * * * ionice -c3 nice -n 19 /opt/apache/htdocs/admin/AWStats69t_Jpn/wwwroot/cgi-bin/awstats.cron > /dev/null 2>&1 * * * * * run-parts /etc/cron.daily * * * * * run-parts /etc/cron.hourly * * * * * run-parts /etc/cron.weekly

こんな感じで、crontabが復元されるので、cron.(daily|hourly|weekly)に設定されている部分など、不必要な部分を除いてやればよいと思います。まぁ、対象がrootでなければ余計なものはあまり出てこないと思いますが。

[crontab -r とやってしまった時の対処法 の続きを読む]
  • *1: ちなみにこの方法は僕が考案したわけではなく、以前にとあるプロジェクトで同様の事故が起きた際にある人が考えついた方法です。そのときは手動でやっていたのを脇目で眺めているだけでした。

at 20:27 |
2009/04/25

Rubyでお手軽MQ

ruby  sh  mom 

仕事でバッチの多重起動を防止するスクリプトを書いたのですが、これだと後続のバッチがキャンセルされてしまって実行されないので、ジョブをQueueに溜めて逐次実行してくれる仕組みが欲しくなったので、Rubyを使ってMQサーバを書いてみました。

RubyにはQueueクラスがあるので、これを使ってdrbからメッセージを投げ込むようにすれば簡単なMQサーバはすぐにできるのですが、これだとメッセージの永続化機能がないので、不慮の事故でマシンの電源が落ちたりするとそのままメッセージが消滅してしまいます。それだと色々と問題があるので、今回はap4rのバックエンドにも使われている永続化機能を持ったメッセージキューであるreliable-msgを使います。

僕がかつて使っていたIBM MQ Series ( Webshere MQ Series )と比べればおもちゃのようなものですが、ちょっと使う分にはこれで十分です。

[Rubyでお手軽MQ の続きを読む]

    at 23:11 |
    «Prev || 1 · | Next»
    » ArchiveList (Tag for "sh / ruby" )