LINUX.ORG.RU
решено ФорумAdmin

Cron в контейнере Dockera не работает

 , , ,


0

1

Привет. Не могу понять почему не работает. Dockerfile такой:

FROM python:3.11.9-alpine3.20
RUN apk add --no-cache htop coreutils 
RUN pip3 install --no-cache --upgrade pip setuptools
RUN pip install datetime
ADD skript123.sh /opt/skript123.sh
ADD pyskript.py /opt/pyskript.py
RUN chmod 0755 /opt/skript123.sh
RUN chmod 0755 /opt/pyskript.py
COPY cronjob /etc/cron.d/cronjob
RUN chmod 0755 /etc/cron.d/cronjob
RUN crontab /etc/cron.d/cronjob
CMD [ "/usr/sbin/crond", "-d", "4" ]

Содержимое cronjob: 0,5,10,15,20,25,30,35,40,45,50,55 * * * * sh /opt/skript123.sh | grep blablabla | awk ‘{print $5 «\t» $9}’ > file.txt; python3 /opt/pyskript.py >> report.txt

Запускаю: docker run -it --rm -p 222:21 4d49a7385112 /bin/sh (энтрипойн пока шелл, крон не запущен)

Смотрю crontab -l и вижу что там всё ок, задание есть.

Выполняю задачу из крона вручную: sh /opt/skript123.sh | grep blablabla | awk '{print $5 "\t" $9}' > file.txt; python3 /opt/pyskript.py >> report.txt

Скрипт отрабатывает, результирующий файл report.txt есть. Стартую крон так: crond -f -S В логи получаю: (crond[11]: crond (busybox 1.36.1) started, log level 8) Жду запуска, вижу:

crond[11]: USER root pid  12 cmd sh /opt/skript123.sh | grep blablabla | awk '{print $5 "\t" $9}' > file.txt; python3 /opt/pyskript.py >> report.txt

Ну типа всё работает. НО Скрипт не запущен. Результируещего файла нет.

Я если честно уже умаялся. Пробовал по разному стартовать crond. Примерно такой же результат с мейджем 3.11.9-bullseye. (только там просто командой CMD cron запускал. И тоже не работает ничего!) ЧЯДНТ?



Последнее исправление: udcccc (всего исправлений: 3)

Это попытка использовать docker чтобы не тянуть в систему python версию и библиотеки для скрипта? (вы слышали про venv или про упаковку python в исполняемый файл?)

Разве нельзя просто использовать cron внешней системы для запуска скрипта внутри контейнера?

Ну типа всё работает. НО Скрипт не запущен. Результируещего файла нет.

Файл скорее всего есть, просто не там где вы его ожидаете, попробуйте силами find в контейнере поискать этот файл.
Ну или добавить вывод ошибок и посмотреть есть ли какие
Ну или использовать полные пути файлов, а не относительные

Flotsky ★★
()