Как создать docker-контейнер в проекте на Yii2, в котором бы работал cron?
У меня есть проект на Yii2 который разнесен по контейнерам: backend, frontend и т.п. и есть необходимость раз в сутки вызывать консольную команду, типа php yii cron/midnight и для этого я хочу добавить в мой docker-compose новый микросервис в виде отдельного контейнера, который бы бы подхватывал хранимый в репозитории проекта файл с описанием cron-сценариев и обрабатывал бы их уже внутри себя.
Проблема в том, что при всей простоте задачи - такой контейнер я могу создать разными способами на основе разных образов, но вот добиться следов выполнения заданий по cron - я никак не могу. Cron вроде как оказывается запущенным, но ожидаемых результатов от работы - нет :(
Может ли кто подсказать простую реализацию такого cron-контейнера, который бы умел в php yii по крону?
такой контейнер я могу создать разными способами на основе разных образов, но вот добиться следов выполнения заданий по cron - я никак не могу. Cron вроде как оказывается запущенным, но ожидаемых результатов от работы - нет :(
Хотелось бы увидеть что конкретно вы уже пробовали сделать. Приведите пример Dockerfile и docker-compose.yml, с вашими экспериментами с кроном.
Общая структура проекта выглядит так:
имеет смысл для демонстрации сделать что-нибудь простое, например, в лог-файл выводить дату/время каждую минуту - это и будет признаком того что крон отрабатывает корректно.
для запуска вот часть из docker-compose:
вот содержимое для ./cron/crontab: * * * * * date >> /var/log/cron.log
вот содержимое для ./cron/Dockerfile:
# Используем базовый образ
FROM yiisoftware/yii2-php:7.4-fpm-nginx
# Устанавливаем cron и другие необходимые пакеты
RUN apt-get update && apt-get install -y cron
# Создаем файл для логов
RUN touch /var/log/cron.log && chmod 0666 /var/log/cron.log
# Копируем crontab файл в контейнер
COPY crontab /etc/cron.d/my-cron-job
# Даем права на выполнение crontab файла
RUN chmod 0644 /etc/cron.d/my-cron-job
# Применяем crontab
RUN crontab /etc/cron.d/my-cron-job
# Запускаем cron в foreground режиме
CMD ["cron", "-f"]
а, ну и самое главное ж забыл написать )) ... контейнер в таком виде стартует успешно, и даже крон кажется запущен, но вот обзор файла через cat /var/log/cron.log ничего не даёт - файл пуст, т.е. задание не выполняется получается. В других похожих тестах я пытался выполнить логику через php yii *, но никаких ожидаемых изменений в хранимых данных - так же не происходило
Да, это самый очевидный вариант, но я хочу добиться большей автономности от хостовой системы, с целью полного управления сценариями и их применением, хочется иметь свой микросервис для этого.