django_crontab 不适用于生产 docker

Dan*_*ken 3 python django cron docker

我正在尝试使用 django_crontab 每天运行两次计划脚本。我在ubuntu 18上本地测试过,可以用。但是,当我尝试在服务器上运行它(在远程 Ubuntu 服务器上运行 Django 项目的 python Docker 映像)时,什么也没有发生。这是我的代码:

setting.py:

INSTALLED_APPS = (
.
.
    'django_crontab',
.
.
.
)

RONJOBS = [
    ('0 9,21 * * *', 'appname.folder.file.start')
]
Run Code Online (Sandbox Code Playgroud)

我通过以下方式执行了 cron:

$ python manage.py crontab add .
Run Code Online (Sandbox Code Playgroud)

并查看活动作业:

$ python manage.py crontab show
f95300a5599dc7687ac79ab51c8bb33c -> ('0 9,21 * * *', 'appname.folder.file.start')

Run Code Online (Sandbox Code Playgroud)
def start():
  logger.info(" process begins!")
  do_something()
Run Code Online (Sandbox Code Playgroud)

注意'start' 函数已在生产服务器中进行了测试并且可以正常工作。

我还尝试通过添加 CRONJOB 的路径来映射 chronjob 日志setting.py

('0 9,21 * * *', 'appname.folder.file.start','>> /Logs/crontab.log')
Run Code Online (Sandbox Code Playgroud)

但该文件 crontab.log未创建。

有什么建议么?谢谢!

Gla*_*arx 10

我遇到了同样的问题,这就是我为解决前面提到的问题所做的:

  • 安装cron在容器中。
  • 将命令添加service cron startCMDDockerfile 中。
  • 将命令添加python manage.py crontab addCMDDockerfile 中。

启动容器后,我检查了 cronjobs 是否是使用命令python manage.py crontab show和创建的crontab -l。在这两种情况下我都可以看到 cronjobs。

我再次测试了它并且它可以工作。我使用了以下内容:

docker-compose
command: bash -c "service cron start && python manage.py crontab add && gunicorn serv.wsgi:application --bind 0.0.0.0:8000 --timeout 600 --workers 5" 或 Django 的开发服务器。python manage.py runserver 0:8000

Dockerfile

FROM  python:3.9

RUN apt-get -y update

# Install cron.
RUN apt-get install -y cron && touch /var/log/cron.log

WORKDIR /app
COPY ./docker/python/django/requirements.txt /app/

RUN pip install -r requirements.txt

COPY ./app/ /app/```
Run Code Online (Sandbox Code Playgroud)

  • 虽然这不是完整的答案,但它提供了解决该问题的方法,因此保留在这里很有用。 (2认同)