たごもりすメモ

コードとかその他の話とか。

scribedを簡単に起動/停止できてログ出力を便利にできるinit script書いた

推計全国20人くらいはいると思われるscribed管理者にはわかってもらえると思うけどscribedの起動/停止の制御はいろいろと面倒くさいしログもdaemontoolsとかにお願いしない限りはなんかうざい。そして更にそのうちの10人くらいにはわかってもらえると思うがscribedからHDFSに書き込みをしようと思うと起動ユーザもroot以外にしないといけないんだけど停止コマンドはrootで実行しないといけなくてうあああああああああああああああああああああああああ。

とかいうストレスが限界に達したのでinit scriptを書いた。
tagomoris/scribed_launcher · GitHub

これまで

起動

 $ su - hadoop
 $ /usr/bin/nohup scribed /etc/scribed.conf | /usr/local/apache2/bin/rotatelogs /var/log/scribed/scribed.log 86400 &

すばらしく面倒くさいですね! しかも .bashrc とかにCLASSPATH指定があればいいけど、それが無い場合は上述コマンドに加えてCLASSPATH指定まで突っ込まないといけないし /var/log/scribed 以下がうっかり hadoop ユーザで書き込めないような状況になってたりしてエラーったら憤死ものですよ!

停止

 $ su -
 # /home/hadoop/path/to/scribe_ctrl stop 1463

停止はネットワーク経由で停止コマンドを送ることになるんだけど scribe_ctrl ってscribeのソースのexampleに入ってるだけでscribedインストールしてもどこにも入ってないし、うっかり hadoop ユーザで実行したりすると「rootになって出直してこい」(意訳)とか言われるんですよ!!うきー!

これから

インストール

 $ su - 
 $ git clone git://github.com/tagomoris/scribed_launcher.git
 $ cd scribed_launcher
 $ make install

scribedの実行ファイルは /usr/local/bin/scribed がデフォルトだけど、インストール時にパスが通ってる場所に scribed があるかどうかはチェックして、あればそれを設定ファイルに書き込んで以降の起動で使う。もしくは自分で /etc/scribed_launcher.conf の SCRIBED_PATH を書き換えてくれ。

起動

 $ sudo /etc/init.d/scribed start

scribed自体の設定ファイルは /etc/scribed.conf として置く。変えたければ /etc/scribed_launcher.conf に設定があるから適当に書き換える。実行ユーザとかについても同じ。設定ファイルでごにょごにょやるとrotatelogs経由でのログ出力とかもできる。CLASSPATHも設定ファイルで指定できるからHDFSに書き込むんならhadoop/lib/*.jarを指定しとけ。

停止

 $ sudo /etc/init.d/scribed stop

停止とかはネットワーク経由で停止コマンドを叩くけど、ポートは設定ファイルから読み取って実行してくれる。べんり! たまに停止に時間がかかることがあって「うまく停止できなかった」とかメッセージが出るけど、あわてずさわがずログを確認だ!

scribedのインストールもやってくれるんですか?

そんなめんどくさいところまで作ってられるか。自分でやってください。がんばってね。