Como tornar o monit “check process” condicional?

2

Eu tenho um script monit que faz algo assim:

check process sidekiq_1 with pidfile /tmp/pids/sidekiq_1.pid
 start program = "/bin/bash -l -c 'bundle exec sidekiq start" as uid jim and gid jim with timeout 250 seconds
 stop program = "/bin/bash -l -c 'bundle exec sidekiq stop" as uid jim and gid jim with timeout 120 seconds
 if cpu usage > 25% for 18 cycles then restart
 if mem > 1500.0 MB for 18 cycles then restart

Isso é ótimo, no entanto, preciso que o cheque seja condicional com base na existência de um arquivo acionador assim:

Somente execute a verificação (inicie o processo), se o arquivo /tmp/do_not_start_sidekiq.txt NÃO estiver presente.

Desta forma eu poderia fazer um touch /tmp/do_not_start_sidekiq.txt se eu quisesse desligar os processos e não ter monit iniciando-os novamente, até eu fazer um rm /tmp/do_not_start_sidekiq.txt

Como eu alteraria esse script monit para obter esse comportamento?

    
por Niels Kristian 23.07.2014 / 14:18

1 resposta

3

A maneira correta de lidar com isso com o monit é "desmonitorar" o processo ...

Um exemplo:

monit unmonitor sidekiq_1

Não tentará reiniciar ou reportar problemas com o processo.

Você pode restaurar o monitoramento da verificação com:

monit monitor sidekiq_1

Estes também podem ser agrupados ou iniciados pelo cron. Uma boa implementação real pode ter aplicações monitoradas durante o horário comercial e não monitoradas durante janelas de inatividade, controladas pelo cron ...

################################################################################
# Shutdown Cucumber
################################################################################
01  15 * * 1-5 monit unmonitor '/bin/hostname'
50  23 * * 0-5 monit -g servers stop all
51  23 * * 0-5 monit -g base  stop all
52  23 * * 0-5 monit stop all

Editar:

Se você precisar que um usuário não privilegiado consiga controlar esse comportamento, aproveite as% de /etc/sudoers entradas para os comandos monit unmonitor/monitor .

Algo como:

jim ALL=NOPASSWD: /usr/bin/monit unmonitor sidekiq_1

Permitiria que esse comando específico fosse executado pelo seu usuário sem privilégios, jim.

    
por 23.07.2014 / 14:43