我在 Docker 容器中运行 Django crontab 作业时遇到问题。 crontab 作业在我的本地开发环境中完美运行,但是当我对 Django 应用程序进行 dockerize 并尝试在容器中运行它时,crontab 作业似乎没有按预期执行。
以下是我遇到的设置和问题的详细说明:
THIRD_PARTY_APPS = [
"django_crontab",
]
CRONJOBS = [
("* * * * *", "apps.{path}.jobs.deactivate_expired_enrollments"),
]
此配置设置一个 crontab 作业来停用过期的课程注册。 crontab 作业在这种环境中完美运行。
Dockerfile:
# Install apt packages
RUN apt-get update && apt-get install --no-install-recommends -y \
# Installing cron
cron \
RUN touch /var/log/cron.log
RUN (crontab -l ; echo "* * * * * echo 'Hello world' >> /var/log/cron.log") | crontab
# Run the command on container startup
CMD cron && tail -f /var/log/cron.log
开始.sh:
#!/bin/bash
set -o errexit
set -o pipefail
set -o nounset
python manage.py migrate
python manage.py crontab add
python manage.py runserver 0.0.0.0:8000
# crontab -l
* * * * * echo Hello world >> /var/log/cron.log
* * * * * /usr/local/bin/python /app/manage.py crontab run b428252730534a0b85d6be057a9debe1 # django-cronjobs for config
python manage.py crontab show
。但是,该作业并未按预期执行。即使作业显示为活动状态,它也不会按照指定的时间间隔运行。命令 python manage.py crontab run {cron_id}
仅执行作业一次,但它不会按应有的方式自动运行。我检查了各个方面,例如 Docker 设置、配置 crontab 作业的方式以及 Docker 和 crontab 服务之间的交互。一切似乎都是正确的,并且我没有收到任何可以为我指明调试方向的错误消息。
我正在寻求帮助来理解为什么 crontab 作业没有在 Docker 容器中按预期运行。如果有人有在 Docker 化环境中运行 Django crontab 作业的经验,并且可以提供有关潜在陷阱、配置调整或故障排除步骤的见解,我将不胜感激。
感谢您的时间和帮助。
为了解决 crontab 作业未在 Docker 容器内运行的问题,我将
service cron start
命令添加到 start.sh 脚本中。我的目的是在容器内手动启动 cron 服务,希望这可以触发 crontab 作业的执行。
但不起作用。
问题可能是因为您的 docker 容器在交付时没有提供
django-crontab
所需的某些依赖项,导致库在无服务器环境中几乎无法使用。这些依赖项之一可能类似于 systemd
。在您的情况(无服务器环境)中工作的 django-crontab
的替代方案是 django-serverless-cron