Мониторинг redis с богом - мониторинг условий - PullRequest
2 голосов
/ 28 апреля 2011

Я пытаюсь контролировать redis с богом, но бог пытается перезапустить его, даже если он уже запущен.Это мой сценарий .god (перенесенный из http://blog.thomasmango.com/post/636319317/resque-in-production):

# Redis
%w{6379}.each do |port|
  God.watch do |w|
    w.name = "redis-server"
    w.interval = 30.seconds
    w.start = "/etc/init.d/redis-server start"
    w.stop = "/etc/init.d/redis-server stop"
    w.restart = "/etc/init.d/redis-server restart"
    w.start_grace = 10.seconds
    w.restart_grace = 10.seconds

    w.start_if do |start|
      start.condition(:process_running) do |c|
          c.interval = 5.seconds
          c.running = false
      end
    end
  end
end

Теперь, когда я начинаю бог, вот так:

god -c /home/phlegx/workspace/projectx/config/god/config.god -D --log-level debug

Я получаю следующий вывод:

I [2011-04-28 18:32:10]  INFO: Loading /home/phlegx/workspace/projectx/config/god/config.god
I [2011-04-28 18:32:10]  INFO: Syslog enabled.
I [2011-04-28 18:32:10]  INFO: Using pid file directory: /var/run/god
I [2011-04-28 18:32:10]  INFO: Started on drbunix:///tmp/god.17165.sock
I [2011-04-28 18:32:10]  INFO: redis-server move 'unmonitored' to 'up'
D [2011-04-28 18:32:10] DEBUG: driver schedule #<God::Conditions::ProcessRunning:0x000000020929d0> in 0 seconds
I [2011-04-28 18:32:10]  INFO: redis-server moved 'unmonitored' to 'up'
I [2011-04-28 18:32:10]  INFO: redis-server [trigger] process is not running (ProcessRunning)
D [2011-04-28 18:32:10] DEBUG: redis-server ProcessRunning [true] {true=>:start}
I [2011-04-28 18:32:10]  INFO: redis-server move 'up' to 'start'
I [2011-04-28 18:32:10]  INFO: redis-server start: /etc/init.d/redis-server start
D [2011-04-28 18:32:20] DEBUG: driver schedule #<God::Conditions::ProcessRunning:0x000000020929d0> in 0 seconds
I [2011-04-28 18:32:20]  INFO: redis-server moved 'up' to 'up'
I [2011-04-28 18:32:20]  INFO: redis-server [trigger] process is not running (ProcessRunning)
D [2011-04-28 18:32:20] DEBUG: redis-server ProcessRunning [true] {true=>:start}
I [2011-04-28 18:32:20]  INFO: redis-server move 'up' to 'start'
I [2011-04-28 18:32:20]  INFO: redis-server start: /etc/init.d/redis-server start

D [2011-04-28 18:32:30] DEBUG: driver schedule #<God::Conditions::ProcessRunning:0x000000020929d0> in 0 seconds
I [2011-04-28 18:32:30]  INFO: redis-server moved 'up' to 'up'
I [2011-04-28 18:32:30]  INF (ProcessRunning)O: redis-server [trigger] process is not running
D [2011-04-28 18:32:30] DEBUG: redis-server ProcessRunning [true] {true=>:start}
I [2011-04-28 18:32:30]  INFO: redis-server move 'up' to 'start'
I [2011-04-28 18:32:30]  INFO: redis-server start: /etc/init.d/redis-server start

Как вы можете видеть, он всегда жалуется на:

INF (ProcessRunning)O: redis-server [trigger] process is not running

Кто-нибудь знает, что это может быть причиной?

PID, который Бог пишет в "/ var / run / god/redis-server.pid ", кажется, не то же самое, что когда я делаю" ps ":

ps aux | grep redis
redis     7702  0.0  0.0   9876  1376 ?        Ss   18:00   0:01 /usr/bin/redis-server /etc/redis/redis.conf

Разве PID в" redis-server.pid "не должен совпадать с" ps ""показывает?

1 Ответ

8 голосов
/ 01 мая 2011

Я не знаком с богом (эхе), но подозреваю, что он ожидает, что Redis не демонизирует себя (как это делает daemontools). Если это так, вы должны выключить самодемонизацию в файле конфигурации redis. IIRC это параметр "daemonize = yes", измените его на no. Это может сработать для вас.

Теперь, если это так, причина, по которой файл PID может отличаться, состоит в том, что бог может запустить его и записать PID, а затем, когда команда redis-server возвращается, она думает, что Redis умер и пытается перезапустить. В этот момент будет записан новый PID. Это очевидно, если запущенный PID меньше PID в файле.

...