Eu queria saber como configurar um contêiner de cron job separado em meu docker swarm para executar cron jobs em um processo/contêiner separado. Gostaria de resumir alguns conhecimentos que reuni em vários posts até conseguir que todos os meus cron jobs funcionassem no docker swarm. Adicione melhorias nos comentários ou edite-os diretamente, se puder.
Isso foi testado com o docker 17.04 e um contêiner debian:jessie para tarefas cron.
Responder1
construir
Dockerfilepara contêiner de cron job, instala o cron, inicia o serviço cron na inicialização do contêiner e mantém o contêiner em execução com o comando tail
RUN apt-get update && apt-get install -qq -yes cron
CMD service cron start && tail -f /dev/null
composição
docker-compose.yml
services:
cron:
image: debian:jessie
volumes:
- mycronjobs:/etc/cron.d
arquivos de trabalho
no caminho raiz do seu projeto, tenha uma pasta contendo seus cron jobs (use apenas sublinhados para caracteres especiais no nome do arquivo)
me@machine:/projectdir$ ls -al
-rw-rw-r-- 1 me me 978 Apr 26 17:49 docker-compose.yml
-rw-rw-r-- 1 me me 1052 Apr 26 18:06 Dockerfile
drwxrwxr-x 6 me me 4096 Apr 26 16:57 mycronjobs
me@machine:/projectdir$ ls -al mycronjobs
-rw-rw-r-- 1 me me 978 Apr 26 17:49 job-dash-bad
-rw-rw-r-- 1 me me 1052 Apr 26 18:06 job_underscore_good
-rw-rw-r-- 1 me me 1052 Apr 26 18:06 check_running
definição de trabalho
você pode ter tarefas cron em
/var/spool/cron/crontabs/mycrontabque são criados via ferramenta cli$crontab/ também conhecido como usuário crontabs
/etc/crontabsque é uma coleção de crontabs para todo o sistema
- '* * * * *' root /bin/touch /projectdir/system_crontab_works # sem 's
- /etc/cron.dailyque é uma pasta que contém scripts bash simples em execução diariamente
- /etc/cron.dque é uma pasta contendo tarefas cron de todo o sistema em arquivos semelhantes a/etc/crontabs. Os arquivos não devem conter travessões, apenas sublinhados
- sudo vi /etc/cron.d/system_cron
- '* * * * *' root /bin/touch /projectdir/system_cron.d_works # sem 's
- sudo chown root:root /etc/cron.d/system_cron