Docker: задание cron не запускается - PullRequest
0 голосов
/ 15 апреля 2019

Я пытаюсь заставить cronjob работать в проекте, развернутом с помощью Docker. Я могу создать образ и успешно запустить контейнер, однако, когда я вхожу в контейнер и проверяю /var/log задание cron не запустилось.

Вот файлы:

Dockerfile

# use this image, as we'll need to run chron etc.
FROM phusion/baseimage:0.11

# Install python3, pip and cron
RUN apt-get update && \
    apt-get -y install cron python3 python3-pip && \
               pip3 install --upgrade pip

# Create required volumes
VOLUME /var/log   
VOLUME /srv/data

# Set environment
ENV TEST_ENV=/srv/data

COPY fetcher.py /fetcher.py

# Add crontab file in the cron directory
ADD crontab /etc/cron.d/cron-fetcher

# Give execution rights on the cron job
RUN chmod 0644 /etc/cron.d/cron-fetcher

# Create the log file to be able to run tail
RUN touch /var/log/cron.log

# Apply cron job
RUN crontab /etc/cron.d/cron-fetcher


# Run the command on container startup
CMD ["cron", "-f"]

кронтаб

# placed in /etc/cron.d 
* * * * * root python3 /fetcher.py >> /var/log/fetcher.log

fetcher.py

#!/usr/bin/env python

import urllib.request

# python script which needs an environment variable and runs as a cron job
import datetime
import os

test_environ = os.environ["TEST_ENV"]
print ("Cron job has run at {0} with environment variable '{1}'".format(datetime.datetime.now(), test_environ))
host_path = test_environ
url = 'http://winterolympicsmedals.com/medals.csv'
response = urllib.request.urlopen(url)
html = response.read()
filename = "{0}/data.csv".format(host_path)

with open(filename, 'wb') as f:
    f.write(html)

Почему не работает cronjob?

1 Ответ

1 голос
/ 15 апреля 2019

Для файлов в /etc/cron.d необходимо указать пользователя:

# placed in /etc/cron.d 
* * * * * root python3 /fetcher.py >> /var/log/fetcher.log
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...