Fix cron container: switch dcron→cron, export env vars for cron jobs
All checks were successful
Build and push Docker image / build (push) Successful in 12s
Test / test (push) Successful in 15s

- dcron doesn't support /etc/cron.d/ (vixie-cron format) — replace with
  standard 'cron' (vixie cron) which does
- Cron jobs run with a stripped environment and couldn't reach the database;
  fix by dumping Docker env vars to /etc/environment at startup and sourcing
  it in the cron job entry

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Marwin Schulz 2026-03-20 09:16:29 +01:00
parent fe4e1b5250
commit 74bebe6451

View file

@ -2,7 +2,7 @@ FROM python:3.12-slim
WORKDIR /app WORKDIR /app
RUN apt-get update && apt-get install -y --no-install-recommends dcron && rm -rf /var/lib/apt/lists/* RUN apt-get update && apt-get install -y --no-install-recommends cron && rm -rf /var/lib/apt/lists/*
COPY requirements.txt . COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt RUN pip install --no-cache-dir -r requirements.txt
@ -10,9 +10,12 @@ RUN pip install --no-cache-dir -r requirements.txt
COPY . . COPY . .
# Write cron job: refresh podcast feeds every hour # Write cron job: refresh podcast feeds every hour
RUN echo "0 * * * * root cd /app && python manage.py refresh_feeds >> /var/log/cron.log 2>&1" \ # The job sources /etc/environment so Docker env vars (DB path, secret key etc.) are available.
RUN echo "0 * * * * root . /etc/environment; cd /app && python manage.py refresh_feeds >> /var/log/cron.log 2>&1" \
> /etc/cron.d/podcast-refresh && \ > /etc/cron.d/podcast-refresh && \
chmod 0644 /etc/cron.d/podcast-refresh && \ chmod 0644 /etc/cron.d/podcast-refresh && \
touch /var/log/cron.log touch /var/log/cron.log
CMD ["dcron", "-f"] # Dump Docker env vars into /etc/environment at container start so cron jobs can read them,
# then launch vixie cron in foreground.
CMD ["bash", "-c", "printenv > /etc/environment && cron -f"]