Соответствующие части 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)
Я в растерянности. Гуглил и искал разные решения, но пока ничего не получалось.