godのスタートアップをやってみた

More than 5 years have passed since last update.

注意:

ちょっとふざけて書いてます。

気分が悪くなる方はすぐにページを離れてください。


基本


概要

Ruby製モニタリングアプリケーション

設定ファイルをRubyで記述できる

名は " G o d " = " ネ 申 "


インストール

$ [sudo] gem install god

god --version #=> Version 0.12.1

バージョンが確認できればOK


神を動かしてみる


simple.rb

loop do

puts 'Hello'
sleep 1
end

というプログラムを作る。

確認のため、実行してみよう。

$ ruby simple.rb #=> 1秒おきに'Hello'と出力する

次に、神への願いを記述する。(Godの設定ファイルを書く)


simple.god

God.watch do |w|

w.name = "simple"
w.start = "ruby [/full/path/to/]simple.rb" # sample.rbへのフルパス
w.keepalive
end

神が降臨する。(Godを起動する)

$ god -c [/path/to/]simple.god

神の気配を感じるか?(プロセスが生きているか確認)

$ ps ax | grep simple.rb

3546 s000 R+ 0:00.00 grep simple.rb
mosson-book:Desktop mosson$ god -c simple.god
mosson-book:Desktop mosson$ ps ax | grep simple.rb
3554 s000 R+ 0:00.00 grep simple.rb

神がいったい何をしたというのか!!?(先ほどのコードの解説)


simple.god

# 神は見ておられる

God.watch do |w|
# 神に名前を覚えていただく
w.name = "simple"
# 神にコマンド実行の方法を覚えていただく
w.start = "ruby [/full/path/to/]simple.rb"
# 神にプロセスを生かし続けていただく
w.keepalive
end

$ god -c [/path/to/]simple.god -D

# -c CONFIG コンフィグファイルを読み込む
# -D デーモンで実行しない

# 神の預言を授かりたい人は以下のコマンドをうつべきだ
$ god --help

神に先ほどのプロセスを止めてもらう

$ god stop simple #=> 神は名前を覚えていらっしゃる

Sending 'stop' command

The following watches were affected:
simple

プロセスを確認する

$ ps ax | grep simple.rb

3560 s000 S+ 0:00.00 grep simple.rb

いったん神を停止する

$ god terminate

神に監視の条件を告げてみよう


simple.god

God.watch do |w|

w.name = "simple"
w.start = "ruby /full/path/to/simple.rb"
# 次の条件で再起動
w.keepalive(
:memory_max => 150.megabytes,
:cpu_max => 50.percent
)
end

この条件を達成するためにサンプルアプリケーションを改変する


simple.rb


data = ''
loop do
puts 'Hello'
100000.times { data << 'x' }
end


お気づきの通りこのプログラムはメモリダダ漏れを狙っている。

良き羊達は実行しないように。

それでは神に降臨していただこう。

$ god -c [/path/to/]simple.god -D

今回はノンデモナイズで起動する

I [2012-09-14 18:12:01]  INFO: Loading simple.god

I [2012-09-14 18:12:01] INFO: Syslog enabled.
I [2012-09-14 18:12:01] INFO: Using pid file directory: /Users/mosson/.god/pids
I [2012-09-14 18:12:01] INFO: Started on drbunix:///tmp/god.17165.sock
I [2012-09-14 18:12:01] INFO: simple move 'unmonitored' to 'init'
I [2012-09-14 18:12:01] INFO: simple moved 'unmonitored' to 'init'
I [2012-09-14 18:12:01] INFO: simple [trigger] process is not running (ProcessRunning)
I [2012-09-14 18:12:01] INFO: simple move 'init' to 'start'
I [2012-09-14 18:12:01] INFO: simple start: ruby /Users/mosson/Desktop/simple.rb
I [2012-09-14 18:12:01] INFO: simple moved 'init' to 'start'
I [2012-09-14 18:12:01] INFO: simple [trigger] process is running (ProcessRunning)
I [2012-09-14 18:12:01] INFO: simple move 'start' to 'up'
I [2012-09-14 18:12:01] INFO: simple registered 'proc_exit' event for pid 3763
I [2012-09-14 18:12:01] INFO: simple moved 'start' to 'up'
I [2012-09-14 18:12:01] INFO: simple [ok] memory within bounds [5024kb] (MemoryUsage)
I [2012-09-14 18:12:01] INFO: simple [ok] cpu within bounds [29.1%%] (CpuUsage)

I [2012-09-14 18:12:16]  INFO: simple [ok] memory within bounds [5024kb, 33220kb, 61332kb, 88756kb] (MemoryUsage)

I [2012-09-14 18:12:16] INFO: simple [trigger] cpu out of bounds [29.1%%, *98.4%%, *100.0%%, *100.0%%] (CpuUsage)
I [2012-09-14 18:12:16] INFO: simple move 'up' to 'restart'
I [2012-09-14 18:12:16] INFO: simple deregistered 'proc_exit' event for pid 3763
I [2012-09-14 18:12:16] INFO: simple stop: default lambda killer
I [2012-09-14 18:12:16] INFO: simple sent SIGTERM
I [2012-09-14 18:12:16] INFO: simple process stopped
I [2012-09-14 18:12:16] INFO: simple start: ruby /Users/mosson/Desktop/simple.rb
I [2012-09-14 18:12:16] INFO: simple moved 'up' to 'restart'
I [2012-09-14 18:12:16] INFO: simple [trigger] process is running (ProcessRunning)
I [2012-09-14 18:12:16] INFO: simple move 'restart' to 'up'
I [2012-09-14 18:12:16] INFO: simple registered 'proc_exit' event for pid 3773
I [2012-09-14 18:12:16] INFO: simple moved 'restart' to 'up'
I [2012-09-14 18:12:16] INFO: simple [ok] memory within bounds [5012kb] (MemoryUsage)
I [2012-09-14 18:12:16] INFO: simple [ok] cpu within bounds [32.8%%] (CpuUsage)
I [2012-09-14 18:12:21] INFO: simple [ok] memory within bounds [5012kb, 32936kb] (MemoryUsage)
I [2012-09-14 18:12:21] INFO: simple [ok] cpu within bounds [32.8%%, *99.0%%] (CpuUsage)
I [2012-09-14 18:12:26] INFO: simple [ok] memory within bounds [5012kb, 32936kb, 61164kb] (MemoryUsage)
I [2012-09-14 18:12:26] INFO: simple [ok] cpu within bounds [32.8%%, *99.0%%, *100.0%%] (CpuUsage)
I [2012-09-14 18:12:31] INFO: simple [ok] memory within bounds [5012kb, 32936kb, 61164kb, 89260kb] (MemoryUsage)
I [2012-09-14 18:12:31] INFO: simple [trigger] cpu out of bounds [32.8%%, *99.0%%, *100.0%%, *100.0%%] (CpuUsage)

cpu out of bounds が発生して

move 'up' to 'restart'が呼ばれた。

神は見ておられた。

というようにgodを使うと簡単に便利なことができました。

もっと気になる方はオフィシャルページへGO!