After we're figured out the setup cron jobs in operating system, it's time to learn how to run any scripts in Docker container.
Create folder with your project's name and create there four text files with following names:
myproject/
- my_script.py
- cronjob
- Dockerfile
- docker-compose.yaml
File my_script.py
need for run periodically. It may contain any code for your job. For example:
import requests
r = requests.get(url='https://example.com/')
if r.status_code == 200:
# do something
else:
# do something else
File named as cronjob
should contain Cron expression:
#####
*/5 * * * * /app/env/bin/python3 /app/my_script.py arg1 arg2 >> /app/logs/my_script.log 2>&1
#####
Attention! Last line in cronjob file shouldn't be empty!
Now prepare Dockerfile:
FROM debian:stable
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
USER root
ARG APP=/app
WORKDIR ${APP}
RUN apt update
RUN apt install nano cron python3 python3-pip python3-venv -y
COPY . .
COPY cronjob /etc/cron.d/cronjob
RUN chmod 0644 /etc/cron.d/cronjob
RUN crontab /etc/cron.d/cronjob
RUN touch /var/log/cron.log
RUN python3 -m venv ${APP}/env/
RUN ${APP}/env/bin/pip install --no-cache-dir -r ${APP}/requirements.txt
CMD cron && tail -f /var/log/cron.log
In the end we need configure restart policy in docker-compose.yaml file:
services:
myproject:
restart: unless-stopped
build:
context: .
Now we ready for run:
docker compose up -d
Are my posts is helpful? You may support me on Patreon.
Top comments (0)