Automatize tarefas com monit
06/03/2014Este é um complemento do post anterior sobre monit e veremos como podemos automatizar tarefas rotineiras.
No exemplo tenho uma aplicação Ruby on Rails e preciso restartar o meu servidor de aplicações Unicorn a cada deploy. Para isso o monit deve ficar de olho na minha aplicação aguardando que a mesma sofra alterações após o processo de deploy e em seguida execute uma ação, no nosso caso reiniciar o Unicorn.
Tenho um arquivo de upstart com instruções para inicializar o Unicorn e dar o start na minha aplicação:
description "rails_app server config"
pre-start script
mkdir -p /var/log/unicorn
chown www-data. /var/log/unicorn
mkdir -p /var/run/unicorn
chown www-data. /var/run/unicorn
end script
start on runlevel [23]
stop on shutdown
exec sudo -u www-data sh -c "cd /var/www/rails_app/current && \
bundle exec unicorn -c /etc/unicorn/rails_app.conf"
respawn
Com o upstart posso executar chamadas para minha aplicação sudo (start|stop|restart) rails_app
sendo assim, agora posso explicar para o monit o que ele deve fazer.
A cada deploy executado, o comando touch
será executado para criar um arquivo
chamado restart.txt, sempre que o touch é executado o arquivo gerado sofre
alteração em seu timestamp é justamente com base nisso que o monit vai saber
quando executar a ação de restart.
Nossa configuração do monit ficará assim:
check file restart.txt with path /var/www/rails_app/shared/restart.txt
if changed timestamp
then exec "/usr/sbin restart rails_app"
O monit vai ficar de olho no arquivo restart.txt no diretório
/var/www/rails_app/shared
e sempre que ele sofrer alteração em seu timestamp
a cada novo deploy, a ação de restart será executada.
Happy Hacking ;)