Cron, похоже, не работает на контейнере Ubuntu Docker - PullRequest
0 голосов
/ 12 сентября 2018

Соответствующие части Dockerfile:

RUN apt-get install -y cron
RUN service cron start

ADD cronjob /etc/cron.d/gptswmm-cron
RUN chmod 0644 /etc/cron.d/gptswmm-cron
RUN touch /var/log/cron.log

RUN crontab /etc/cron.d/gptswmm-cron
RUN cron

Я проверяю ps -ef вывод, а cron там нет. Как бы то ни было, я могу раскрутить его вручную после факта с помощью команды cron, и оно отобразится (просто чтобы проверить все мои поля, также выполните service cron start).

UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 15:54 pts/0    00:00:00 /bin/bash
root        41     0  0 15:59 ?        00:00:00 cron
root        65     0  0 16:02 ?        00:00:00 ps -ef

Я делаю crontab -l и получаю то же самое, что и в моем cronfile (который также имеет пустую строку и конец):

MAILTO=""
* * * * * root python /var/test/testcron.py >> /var/log/cron.log 2>&1

Файл Python просто создает (или добавляет, если он существует) тестовый файл в том же каталоге (гарантируется тот же каталог, что и местоположение скрипта), повторяя одно и то же слово. Как простой тест, как вы можете получить. (Первоначально у меня это было отражено в лог-файле, но я сделал это, так как мне больше нравится то, что происходит в скрипте Python, чем bash). Файл Python принадлежит пользователю root со всеми разрешениями для владельца.

Все же, когда я проверяю, где должен быть текстовый файл, ничего. Когда я проверяю /var/log/cron.log, он пуст.

Когда я вручную вызываю python /var/test/testcron.py, он работает и создает выходной файл.

Итак, я запустил некоторые системные журналы, переделав Dockerfile с этим в конце:

RUN apt-get install -y rsyslog

Перестройте и раскрутите контейнер. Сначала запустите rsyslog rsyslogd, затем cron с cron и перепроверьте с service start cron.

Проверьте /var/log/syslog и, кажется, вызывается cron, эти две основные строки повторяются каждую минуту:

... CRON[48]: (root) CMD (python /var/test/testcron.py >> /var/log/cron.log 2>&1^M)
... CRON[47]: (root) CMD (root python /var/test/testcron.py >> /var/log/cron.log 2>&1^M)

Я в растерянности. Гуглил и искал разные решения, но пока ничего не получалось.

1 Ответ

0 голосов
/ 12 сентября 2018

Похоже, я удалил 2>&1 из задания cron:

* * * * * root python /var/test/testcron.py >> /var/log/cron.log

Я скопировал большую часть процедуры из https://www.ekito.fr/people/run-a-cron-job-with-docker/ и предположил, что, возможно, существует перекрёстный провод, поскольку его руководство пытается вывести его на консоль.

Вся благодарность @brthornbury в комментарии к оригинальному вопросу. Размещение в качестве ответа для наглядности для всех, кто сталкивается с этим.

...