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


注意:
ちょっとふざけて書いてます。
気分が悪くなる方はすぐにページを離れてください。

##基本

###概要

Ruby製モニタリングアプリケーション
設定ファイルをRubyで記述できる
名は " G o d " = " ネ 申 "

###インストール

```
$ [sudo] gem install god
```

```
god --version #=> Version 0.12.1
```

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

###神を動かしてみる

```ruby:simple.rb
loop do
	puts 'Hello'
	sleep 1
end
```

というプログラムを作る。
確認のため、実行してみよう。

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

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

```ruby: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
```

神がいったい何をしたというのか！！？（先ほどのコードの解説）

```ruby: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
```

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

```ruby: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
```

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

```ruby: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を使うと簡単に便利なことができました。
もっと気になる方は[オフィシャルページ](http://godrb.com/)へGO!