我在Docker容器中运行Django crontab作业时遇到了问题。这些crontab作业在我的本地开发环境中完美运行,但是当我将我的Django应用程序docker化并尝试在容器中运行时,这些crontab作业似乎无法按预期执行。
以下是设置和我遇到的问题的详细说明:
1. 本地开发(正常工作): 在我的本地开发环境中,我已经在Django设置中添加了以下配置:
这个配置设置了一个定时任务,用于取消过期的课程注册。这个定时任务在当前环境中运行得非常完美。
2. Docker 配置: 为了将我的 Django 应用程序容器化,我创建了一个 Dockerfile 和一个 start.sh 脚本,作为我的 Docker Compose 配置的一部分:
Dockerfile:
问题: 在设置好Docker环境并在容器中运行我的Django应用程序之后,当我运行
我已检查了各个方面,例如Docker设置、配置crontab作业的方式以及Docker与crontab服务之间的交互。一切似乎都是正确的,我也没有收到任何可能指导我进行调试的错误消息。
我希望能够获得帮助,理解为什么crontab作业在Docker容器内未按预期运行。如果有人在Docker化环境中运行Django crontab作业方面有经验,并且可以提供关于潜在问题、配置调整或故障排除步骤的见解,我将非常感激。
谢谢您的时间和帮助。
为了解决Docker容器中crontab作业无法运行的问题,我在start.sh脚本中添加了
以下是设置和我遇到的问题的详细说明:
1. 本地开发(正常工作): 在我的本地开发环境中,我已经在Django设置中添加了以下配置:
THIRD_PARTY_APPS = [
"django_crontab",
]
CRONJOBS = [
("* * * * *", "apps.{path}.jobs.deactivate_expired_enrollments"),
]
这个配置设置了一个定时任务,用于取消过期的课程注册。这个定时任务在当前环境中运行得非常完美。
2. Docker 配置: 为了将我的 Django 应用程序容器化,我创建了一个 Dockerfile 和一个 start.sh 脚本,作为我的 Docker Compose 配置的一部分:
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
start.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
问题: 在设置好Docker环境并在容器中运行我的Django应用程序之后,当我运行
python manage.py crontab show
时,可以正确注册crontab作业。然而,该作业并未按预期执行。尽管该作业显示为活动状态,但它不会按指定的间隔运行。命令python manage.py crontab run {cron_id}
只会执行该作业一次,但它不会像应该那样自动运行。我已检查了各个方面,例如Docker设置、配置crontab作业的方式以及Docker与crontab服务之间的交互。一切似乎都是正确的,我也没有收到任何可能指导我进行调试的错误消息。
我希望能够获得帮助,理解为什么crontab作业在Docker容器内未按预期运行。如果有人在Docker化环境中运行Django crontab作业方面有经验,并且可以提供关于潜在问题、配置调整或故障排除步骤的见解,我将非常感激。
谢谢您的时间和帮助。
为了解决Docker容器中crontab作业无法运行的问题,我在start.sh脚本中添加了
service cron start
命令。我的意图是在容器内手动启动cron服务,希望这样可以触发crontab作业的执行。
但是并没有起作用。