Automatize tarefas com monit

Este é 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 ;)

Comentários