#docker #cron
#docker #cron
Вопрос:
Cron не запускается, когда я захожу в свой контейнер, но когда я захожу в контейнер и запускаю bash service cron restart
, он запускается, я не могу понять, почему это не работает с service cron restart
, но не без него?
Dockerfile
FROM ubuntu:bionic
RUN apt-get update amp;amp; apt-get -y install
cron
nano
psmisc
wget
COPY hello-cron /etc/cron.d/hello-cron
# Give execution rights on the cron job
RUN chmod x /etc/cron.d/hello-cron
# Apply cron job
RUN crontab /etc/cron.d/hello-cron
# Create the log file to be able to run tail
CMD ["cron", "-f"]
мой скрипт hello-cron
* * * * * echo "Hello world" > /usr/src/helloworldcron.log 2>amp;1
Комментарии:
1. crond находится снаружи или внутри контейнера? Я бы не стал помещать его внутрь, потому что для этого требуется, чтобы ваш контейнер запускался постоянно, а контейнер фокусировался на cron, а не на своей работе. Вместо этого вы должны запускать контейнер при каждом запуске задачи и размещать планирование за пределами контейнера. Подход к размещению scheudling внутри контейнера полностью противоречит идее контейнеров. Загружая его на AWS, он будет тратить ресурсы и стоить денег, ничего не делая. Даже у Kubernetes есть свое собственное afaik планирования.
2. @DanielW. Я совершенно новичок в Docker, поэтому кажется, что я допустил ошибку, поместив его в контейнер на моем сервере DO …? Как бы запустить его из-за пределов контейнера? Любая ссылка на ресурс была бы большой благодарностью!
3. Перейдите в свой hosts crontab / scheduler (crond, но также systemd будет работать) и поместите туда строку, подобную
docker run ...
. Также включение* * * * *
означает, что он запускается каждую минуту. Возможно, вы вообще ищете не работу, а потоковую обработку.4. О, хорошо, я думаю, что понимаю. Итак, в основном на сервере, который содержит контейнеры docker, я просто запускаю контейнер на основе задачи cron. В этом контейнере уже выполняется мой код. Затем, по завершении выполнения кода, я каким-то образом вызываю, чтобы остановить контейнер, а затем удалить его? Думая об этом, я беспокоюсь о том, как установить связь между процессом, который я хочу запустить, завершая работу и закрывая контейнер. Правильно ли я отображаю это в графическом виде?
5. В контейнерах рекомендуется использовать только 1 активный процесс, сфокусированный , и когда это сделано, контейнер автоматически останавливается. Когда вы помещаете crond свою работу в контейнер, есть 2 процесса, которые имеют фокус. Вы можете проверить, все еще запущен контейнер, и если это не так, перезапустите его. Вы даже можете настроить контейнеры на автоматический перезапуск по завершении .