Linuxプロセス管理ツール--God-詳細(1)-スタート

5156 ワード

GodはRubyによって作成された監視アーキテクチャで、プロセスが実行状態であることを保障し、いくつかの特殊な状況に対してプロセスの再起動を行うことができます.拡張はfriggaによってグローバルgodの管理を行うことができる.
最良のインストール方法(ruby-gemsを介して):
gem install god

クイックスタート
注:クイック起動には0.12以上のバージョンが必要です.次のコマンドを使用してバージョンを表示できます.
god --version

簡単な例:godを使用して簡単なプロセスを維持します.
次は簡単なスクリプトです.名前はhelloです.py
#!/usr/bin/env python
#
import time

while True:
  print "hello"
  time.sleep(1)

上のhelloを管理するためにgodのプロファイルを書きます.pyのプロセスgod:
God.watch do |w|
  w.name = "hello"
  w.start = "python /root/god/hello.py"
  w.keepalive
 end

これは簡単なgod構成です.まずGodを宣言します.watchモジュールは、上のプロセスを監視、制御することができます.各watchには、このプロセスを開始するコマンドと一意の名前が必要です.keepaliveはgodにこのプロセスの生存を保証することを教えて、もしこのプロセスが死んだら、godは上で定義したstartを通じてプロセスを開始します.
このsimpleの例では、godをフロントエンドに実行し、関連する表示を保証します.
godを実行するには、プロファイル(-C)を指定し、フロントエンドで実行するように要求する必要があります(-D)
god -C simple.god -D

godのモニタリングプロセスは2種類あることが示唆された.1、最良の方法(イベントベース)は、システムごとにサポートされているわけではありませんが、サポートされると自動的に使用されます.関連イベント(終了)が発生するとgodはすぐに知る.2、イベントをサポートしていないシステムでは、godはポーリングメカニズムを使用します.PS:ここはイベントのメカニズムに基づいています.ここの制限のため、ポーリングに基づいていません.見たいなら:http://godrb.com/
#Events

I [2014-08-11 11:10:10]  INFO: Loading simple.god
I [2014-08-11 11:10:10]  INFO: Syslog enabled.
I [2014-08-11 11:10:10]  INFO: Using pid file directory: /var/run/god
I [2014-08-11 11:10:10]  INFO: Socket already in use
I [2014-08-11 11:10:10]  INFO: Socket is stale, reopening
I [2014-08-11 11:10:10]  INFO: Started on drbunix:///tmp/god.17165.sock
I [2014-08-11 11:10:10]  INFO: hello move 'unmonitored' to 'init'
I [2014-08-11 11:10:10]  INFO: hello moved 'unmonitored' to 'init'
I [2014-08-11 11:10:10]  INFO: hello [trigger] process is not running (ProcessRunning)
I [2014-08-11 11:10:10]  INFO: hello move 'init' to 'start'
I [2014-08-11 11:10:10]  INFO: hello start: python /root/god/hello.py
I [2014-08-11 11:10:10]  INFO: hello moved 'init' to 'start'
I [2014-08-11 11:10:10]  INFO: hello [trigger] process is running (ProcessRunning)
I [2014-08-11 11:10:10]  INFO: hello move 'start' to 'up'
I [2014-08-11 11:10:10]  INFO: hello registered 'proc_exit' event for pid 25779
I [2014-08-11 11:10:10]  INFO: hello moved 'start' to 'up'

DEBUG情報から、helloというプロセスは最初は起動していなかったが、godが起動したことがわかります.PS:ポーリングモードに基づいて起動した場合は、5秒に1回のプロセスをチェックすることに注意してください.
イベントベースを体現するために、私はここで1つの操作を追加しました(他の端末でhello.pyを殺して、イベントベースの形式を検証します):
[root@master ~]# ps -ef|grep hello.py
root     25779     1  0 11:10 ?        00:00:00 python /root/god/hello.py
root     25803 25782  0 11:10 pts/1    00:00:00 grep hello.py
[root@master ~]# kill -9 25779
#Event   :
I [2014-08-11 11:11:02]  INFO: hello [trigger] process 25779 exited {:thread_group_id=>25779, :pid=>25779, :exit_code=>9, :exit_signal=>17} (ProcessExits)
I [2014-08-11 11:11:02]  INFO: hello move 'up' to 'start'
I [2014-08-11 11:11:02]  INFO: hello deregistered 'proc_exit' event for pid 25779
I [2014-08-11 11:11:02]  INFO: hello start: python /root/god/hello.py
I [2014-08-11 11:11:02]  INFO: hello moved 'up' to 'start'
I [2014-08-11 11:11:02]  INFO: hello [trigger] process is running (ProcessRunning)
I [2014-08-11 11:11:02]  INFO: hello move 'start' to 'up'
I [2014-08-11 11:11:02]  INFO: hello registered 'proc_exit' event for pid 25807
I [2014-08-11 11:11:02]  INFO: hello moved 'start' to 'up'

PS:ポーリング(Polls)モードであれば、すぐに起動するのではなく、チェックサイクルが来るまで待つ.
ここで、godがどのようにプロセスを保証するかを知っています.cpuがどれだけの再起動プロセスに達したか、memoryがどれだけの再起動プロセスに達したかなど、より空いた管理方法もあります.次は構成の例です.
God.watch do |w|
  w.name = "hello"
  w.start = "python /root/god/hello.py"
  w.keepalive(:memory_max => 150.megabytes,
              :cpu_max => 50.percent)
  end

詳細::memory_maxオプションはkeepaliveのサブコマンドに属します::cpu_maxも同じです.上記の構成では、メモリが150 Mに達した場合、またはCPUが50%に達した場合、godは再起動プロセスに戻ります.デフォルトでは、これらのプロセスは30秒に1回チェックされ、たまにオーバーロードを避けるために(5回以上3回)再起動されます.
ここではアナログメモリの漏洩は行われていません.以下にcpuを再起動するログ、公式ドキュメントを貼ります.http://godrb.com/検索
I [2014-08-11 13:35:46]  INFO: hello [trigger] cpu out of bounds [5.3571428566083%%, *90.3052064640262%%, *94.7069943292977%%, *96.3414634148933%%] (CpuUsage)
I [2014-08-11 13:35:46]  INFO: hello move 'up' to 'restart'
I [2014-08-11 13:35:46]  INFO: hello deregistered 'proc_exit' event for pid 26355
I [2014-08-11 13:35:46]  INFO: hello stop: default lambda killer
I [2014-08-11 13:35:46]  INFO: hello sent SIGTERM
I [2014-08-11 13:35:47]  INFO: hello process stopped
I [2014-08-11 13:35:47]  INFO: hello start: python /root/god/hello.py

またgodを使用して、いくつかのプロセスを操作できます.
god start hello  #hello    .  simple.god    w.name
god stop hello
god restart hello
...

したがって、godの管理プロセスを使用する場合は、関連するプロセスを管理するために特定のプロファイルを自分で作成することができます.たとえば、httpエラー、ディスクioが大きいなどの問題が発生した場合、いくつかのことをするのに役立ちます.