twitter ボットとか、ファイル同期ボットとか、メール転送ボットとかイロイロボット作るよね?ボッと作らないで、プログラムを使う意味がないというか,ボットがあるからこそプログラムに価値があるわけです.
多機能なので基本的なところから
god インストール
gem install god
god を使ってプロセス管理
test.god
God.pid_file_directory = "/tmp/god_pids/" #god が書き込みできるディレクトリ God.watch do |w| w.name = "myscript" w.start = "/home/takuya/test/myscript.rb" w.start_if do | start start.condition(:process_runnning) do | c | c.interval = 60.seconds c.running = false end end end
myscript.rb という適当に、なかなか終わらないファイル。を起動してみる
起動
sudo god -c test.god
ウマく起動しないときは
sudo god -c test.god -D
" -D "を使うこと. -D は、エラーメッセージをコンソールに出してくれるし、バックグラウンドに移行しないので便利です.
god の監視状況を制御する.
#設定再読込 sudo god load myscript #プロセスを止める sudo god stop myscript #god 全体を終了 sudo god terminate
mysqcript はw.name="myscript"で決めた名前。
God で出来ること
- GodはRubyで書かれたプロセス管理ツール
- Godは設定もRubyで書くことが出来る
- God.watchのブロックに設定を書く
- コマンドは何でもいい
- 数分に一度,プロセスが生きてるか確認する.
- プロセスの再起動条件を書くことが出来る
- メモリ使用量が一定値を超えたら再起動する.
- CPUを占有したら再起動する
- 閾値を決めることが出来る.
- 通知機能がある
- ユーザーIDは変更可能
- ワーキング・ディレクトリも変更可能.
- ログは標準出力に
おおい・・・
再起動コマンドの指定
God.watch do |w| ... w.restart = "/home/takuya/myscrpt restart" ... end
終了コマンドの指定
God.watch do |w| ... w.stop = "/home/takuya/myscrpt stop" ... end
プロセスをDaemonizeしたときには特には要らないんですけどね。
CPU占有率が一定を超えたら再起動
God.watch do |w| ... w.restart_if do |restart| ... restart.condition(:cpu_usage) do |c| c.interval = 10.seconds c.above = 20.percent c.times = 5 end end ... end
10秒ごとの測定で,CPU占有率が20%を5回超えたら,再起動する.(再起動コマンド指定すること)
メモリの使用量が一定量を超えたら再起動
w.tansition(:up, :restart).do| on | on.condition(:memory_usage) do |c| c.interval = 20.seconds c.above = 50.megabytes c.times = [3, 5] end
20秒に一回,メモリが使用量50メガをチェックし、5回で3回超えていたら、再起動する.
ログを見たい
ログ機能は、実行スクリプトの、標準出力をログとして取得することが出来る.
God.watch do |w| ... w.log = "/home/takuya/test.log" ... end
ユーザーIDを変えたい
God.watch do |w| ... w.uid = "takuya" w.gid = "takuya" ... end
ワーキング・ディレクトリを指定したい
God.watch do |w| ... w.dir = "/home/takuya/test/tmp/dir" ... end
通知をGmail経由で
これめんどくさいけど,コピペで行くっぽい
Godでプロセスが落ちたときにgmailで通知する方法 - harry’s memorandum
GODの各種機能
開発元ドキュメントを見ると、機能多いので大変,
Grouping Watches
Redirecting STDOUT and STDERR of your Process
Changing UID/GID for processes
Setting the Working Directory
Setting environment variables
Using chroot to Change the File System Root
Lambda commands
Customizing the Default Stop Lambda
Watching Non-Daemon Processes
Loading Other Config Files
Dynamically Loading Config Files Into an Already Running God
Getting Logs for a Single Watch
Notifications
Available Notification Types
Jabber
Prowl
Scout
Webhook
Extend God with your own Conditions
Screenで起動しっぱなしでも良いよね、
screenを使って起動しっぱなしが一番楽なんですよね.
あとnohupとかね