Я хотел узнать, как настроить отдельный контейнер заданий cron в моем docker swarm, чтобы выполнять задания cron в отдельном процессе/контейнере. Я хотел бы подвести итог некоторым знаниям, которые я собрал из нескольких постов, пока не заставил все свои задания cron работать в docker swarm. Пожалуйста, добавляйте улучшения в комментариях или редактируйте их напрямую, если можете.
Это было протестировано с помощью docker 17.04 и контейнера debian:jessie для заданий cron.
решение1
строить
Dockerfileдля контейнера заданий cron устанавливает cron, запускает службу cron при запуске контейнера, затем поддерживает работу контейнера с помощью команды tail
RUN apt-get update && apt-get install -qq -yes cron
CMD service cron start && tail -f /dev/null
состав
docker-compose.yml
services:
cron:
image: debian:jessie
volumes:
- mycronjobs:/etc/cron.d
файлы работы
в корневом каталоге вашего проекта должна быть папка, содержащая ваши задания cron (используйте подчеркивания только для специальных символов в имени файла)
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
определение работы
вы можете иметь задания cron в
/var/spool/cron/crontabs/mycrontabкоторые создаются с помощью инструмента cli$ кронтаб/ он же пользовательские кронтабы
/etc/crontabsкоторый представляет собой общесистемную коллекцию crontab-файлов
- '* * * * *' root /bin/touch /projectdir/system_crontab_works # без 's
- /etc/cron.ежедневноэто папка, содержащая простые скрипты bash, которые запускаются ежедневно
- /etc/cron.dкоторая представляет собой папку, содержащую общесистемные задания cron в файлах, похожих на/etc/crontabs. Файлы не должны содержать дефисов, только подчеркивания.
- sudo vi /etc/cron.d/system_cron
- '* * * * *' root /bin/touch /projectdir/system_cron.d_works # без 's
- sudo chown root:root /etc/cron.d/system_cron