Reiniciar um serviço por meio do monit com um arquivo restart.txt

Hoje em dia, tendemos a automatizar muitas coisas. No entanto, em alguns casos, o monit lida com os daemons e seus eventos de parada / início.

Como resultado, muitas vezes solicitamos inserir uma senha para passar o sudo. Eu realmente não gosto disso, isso me impede de automatizar ou apenas disparar o deploy de algum lugar.

O Nginx e outros serviços oferecem uma maneira simples de reiniciar os processos: uma simples verificação de existência de arquivo. Eu gosto disso.

E bem, Monit pode realmente fazer algo semelhante.

Com o monit antigo, você precisa de 2 arquivos: o script monitrc e um script de reinicialização:

# monitrc file
check file restart_resque

with path /tmp/restart_resque.txt
start program
= "/usr/local/bin/resque_restart.sh"
if timestamp > 1 minute then start
check file stop_resque

with path /tmp/stop_resque.txt
start program
= "/usr/local/bin/resque_stop.sh"
if timestamp > 1 minute then start

# script
#!/bin/bash
if [[ -f /tmp/restart_resque.txt ]]; then
monit restart resque

monit restart resque_scheduler

rm
/tmp/restart_resque.txt
fi

As versões mais recentes permitem que você faça isso em um único arquivo:

check file restart_resque path /tmp/restart_resque.txt
if not exist then exec "/bin/bash -c 'echo dne > /dev/null'" else if succeeded then exec "/bin/bash -c 'monit restart resque && monit restart resque_scheduler && rm /tmp/restart_resque.txt'"
check file stop_resque path
/tmp/stop_resque.txt
if not exist then exec "/bin/bash -c 'echo dne > /dev/null'" else if succeeded then exec "/bin/bash -c 'monit stop resque && monit stop resque_scheduler && rm /tmp/stop_resque.txt'"

Se você estiver usando capistrano, será necessário adicionar algo como o seguinte:

run "touch /tmp/restart_resque.txt"

E voila. Não há mais senhas.

Nota : essa é uma maneira de fazer isso, fico muito feliz em ouvir as idéias e truques de outras pessoas sobre o assunto.