Skip to content
This repository has been archived by the owner on Aug 7, 2018. It is now read-only.

Incorporar rotinas periódicas no Docker para produção. #454

Closed
diraol opened this issue Mar 31, 2018 · 12 comments
Closed

Incorporar rotinas periódicas no Docker para produção. #454

diraol opened this issue Mar 31, 2018 · 12 comments

Comments

@diraol
Copy link
Member

diraol commented Mar 31, 2018

Tentar usar: http://django-cron.readthedocs.io/en/latest/installation.html

Nossas rotinas, final do arquivo:
https://github.com/radar-parlamentar/implantacao/blob/master/cookbooks/radar/recipes/default.rb

@leonardofl
Copy link
Member

Já consegui configurar o django cron para que os jobs sejam chamados periodicamente.

O que falta é colocar uma entrada no crontab que faça com que o comando manage.py runcrons seja constantemente chamado (a cada 1 minuto, por ex).

Eu tentei fazer o seguinte:

crontab -l > mycron # mycron não estava vazio, oq indica q o container já tinha cron
echo "*/1 * * * * python /radar/radar_parlamentar/manage.py runcrons >> /var/log/radar/cronjob.log 2>&1" >> mycron
crontab mycron

Mas não funcionou. Se eu faço o papel de cron e eu mesmo executo o "manage.py runcrons", aí tudo funciona nos conformes. Então acho q é mesmo um "problema de cron".

Meu crontab ficou assim (saída de crontab -l):

# do daily/weekly/monthly maintenance
# min	hour	day	month	weekday	command
*/15	*	*	*	*	run-parts /etc/periodic/15min
0	*	*	*	*	run-parts /etc/periodic/hourly
0	2	*	*	*	run-parts /etc/periodic/daily
0	3	*	*	6	run-parts /etc/periodic/weekly
0	5	1	*	*	run-parts /etc/periodic/monthly
*/1 * * * * python /radar/radar_parlamentar/manage.py runcrons >> /var/log/radar/cronjob.log 2>&1

PS: iniciei o container com:
RADAR_IS_PRODUCTION=True docker-compose up django

@leonardofl
Copy link
Member

Esses testes foram feitos com DemoJob. Mas para completar a issue ainda é preciso implementar os jobs: ImportadorJob, CashRefresherJob e DbDumperJob. O ImportadorJob eu já fiz, só falta fazer com que ele rode apenas semanalmente, e não diariamente.

Essa é última issue que falta para podermos por o Docker em produção!

@leonardofl leonardofl changed the title Incorporar rotinar periódicas no Docker para produção. Incorporar rotinas periódicas no Docker para produção. Mar 31, 2018
@leonardofl
Copy link
Member

@leonardofl
Copy link
Member

Em relação ao problema do crontab, talvez isso ajude:
https://github.com/kraiz/django-crontab

Ou talvez o django-crontab possa substituir o django-cron. Olhando rapidamente, o django-crontab parece ser bem mais simples, e suficiente para nós.

@eduardohideo
Copy link
Contributor

eduardohideo commented Apr 3, 2018 via email

@leonardofl
Copy link
Member

Valeu Eduardo!!! Vou tentar!

Mas de qlqr forma é frustrante q o erro não tenha ido para o log =/

@leonardofl
Copy link
Member

Tentei algo mais simples ainda. Editei o cron com crontab -e e inseri a seguinte linha:

*/1 * * * * echo 'Running in cron' >> /var/log/radar/cronjob.log

E o arquivo /var/log/radar/cronjob.log nem surgiu =(

Acho que está faltando algo bem básico na história aí.... =S

@eduardohideo
Copy link
Contributor

eduardohideo commented Apr 7, 2018 via email

@diraol
Copy link
Member Author

diraol commented Apr 8, 2018

Sobre a linha em branco no final não sei dizer.

Mas "reiniciar o cron" acho que não é necessário, o "crontab -e" já faz todos os checks/cleanups/restarts necessários.

@leonardofl para rodar um script a cada 1 minuto a regra é:
* * * * * echo 'Running in cron' >> /var/log/radar/cronjob.log

Só não se esqueça que se você configurar usando o crontab -e com seu user "comum", ele não tem, por padrão, permissão de escrita nas pastas do /var/log. Então, se a pasta "/var/log/radar" não estiver criada e com uma permissão para que seu usuário escreva lá, isso não vai funcionar (ai você precisaria fazer sudo crontab -e).

Por fim, o echo não cria diretórios.... então talvez você precise fazer algo como:
* * * * * mkdir -p /var/log/radar; touch /var/log/radar/cronjob.log; echo 'Running in cron' >> /var/log/radar/cronjob.log

@leonardofl
Copy link
Member

leonardofl commented Apr 8, 2018

Tentei colocar a linha em branco no final, e não funcionou.

Tentei mudar a linha para * * * * * echo 'Running in cron' >> /var/log/radar/cronjob.log e não funcionou.

Quando eu edito o crontab (com crontab -e) eu estou como root (entrei no container com docker-compose exec django sh).

E o diretório /var/log/radar já existia antes de eu editar o crontab.

@leonardofl
Copy link
Member

Opa, acho q descobri o segredo (por https://forums.docker.com/t/how-to-run-a-cron-job-inside-a-container-alpine/7759/7). Para funcionar, é preciso simplesmente rodar o comando crond.

@leonardofl
Copy link
Member

Comecei fazer o DbDumperJob.

Mas ainda falta terminar esse DbDumperJob e o CashRefresherJob. Como cada um está com suas dificuldades abri issues específicas (#465 e #466).

Como o problema da utilização do framework para que os jobs sejam chamados no momento adequado está resolvido, fecho essa issue.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants