LoginSignup
30
30

More than 5 years have passed since last update.

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

Posted at

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

基本

概要

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!

30
30
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
30