首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >django-crontab不处理docker python:3.9-buster映像

django-crontab不处理docker python:3.9-buster映像
EN

Stack Overflow用户
提问于 2021-11-12 21:50:28
回答 1查看 468关注 0票数 0

我正试图每分钟运行一个cron作业,作为测试,在我的django应用程序上使用django_crontab。我试着运行两个cron作业,一个和django_crontab一起运行,另一个用cron运行。

第1部分django_crontabs

我已经安装了django_crontab并添加到了我的requirements.txt中。

代码语言:javascript
复制
   pip install django-crontab
   django-crontab==0.7.1

2-添加到我的settings.py

代码语言:javascript
复制
    INSTALLED_APPS = [
        'django_crontab',
         ...
    ]

    CRONJOBS = [
        ('*/1 * * * *', 'myapp.cron.my_scheduled_job', '>> /var/log/cron.log 2>&1'),
    ]

3-在文件夹myapp中创建一个文件cron.py。

代码语言:javascript
复制
from datetime import datetime


def my_scheduled_job():
    date = datetime.today().date()
    print(date)
    print('RUNNING CRONTAB YESSSSSSSSSSS!!!!!!!')
    pass
    return True

4-我的文档

代码语言:javascript
复制
FROM python:3.9-buster

WORKDIR /app

COPY ./requirements.txt .

RUN apt-get update && apt-get install libpq-dev gcc python3-dev musl-dev libffi-dev -y && apt-get install -y cron
RUN pip install uwsgi
RUN pip install -r requirements.txt

RUN export PYTHONPATH=$PYTHONPATH:/app/
COPY src/hello-cron /etc/cron.d/hello-cron
RUN chmod 0644 /etc/cron.d/hello-cron
RUN crontab /etc/cron.d/hello-cron
RUN touch /var/log/cron.log

COPY ./src .
ENV PORT=8000
EXPOSE 8000
# Runner script here
CMD ["sh", "/app/runner.sh"]

5-我的对接者-撰写文件

代码语言:javascript
复制
version: '3.3'

services:
    app:
        build: .
        command: bash -c "python3 ./manage.py crontab add && python3 ./manage.py runserver 0.0.0.0:8000"
        ports:
            - 8000:8000
        volumes:
            - ./src:/app/:Z

第2部分linux

6-我创建了一个名为hello-cron的文件,并在上面的Dockerfile上使用了当前的信息:

代码语言:javascript
复制
* * * * * echo "Hello world" >> /var/log/cron.log 2>&1

当我运行sudo docker - up -build时,我会得到我的码头日志。

代码语言:javascript
复制
app_1       |   adding cronjob: (0c7b4daeba89b95a59287e280193e9ca) -> ('*/1 * * * *', 'myapp.cron.my_scheduled_job', '>> /var/log/cron.log 2>&1')
app_1       | Watching for file changes with StatReloader

7-如果我访问我的容器,通过,sudo docker exec -it app_1 bash并运行crontab -l,我得到:

代码语言:javascript
复制
* * * * * echo "Hello world" >> /var/log/cron.log 2>&1
*/1 * * * * /usr/local/bin/python3 /app/manage.py crontab run 0c7b4daeba89b95a59287e280193e9ca >> /var/log/cron.log 2>&1 # django-cronjobs for portal

但是当我检查我的/var/log/cron.log时它是空的..。

我该怎么办?

EN

回答 1

Stack Overflow用户

发布于 2022-03-28 11:56:28

我在Django 4和docker中的crontab也有类似的问题。服务已启动(您可以使用service cron status),已安装了crontab,但没有执行。

我的步骤是重新启动服务,然后在日志中发现一个错误。当crontab执行时,尝试构建settings.py,即使它们在那里也找不到任何env。

我的问题是,当crontab在码头容器中运行时,由于某种原因,无法读取容器的env,但当我运行时手动工作。

我的解决办法是将docker复制到.env文件项目根,然后我的cron完美地工作。

代码语言:javascript
复制
env > app/.env
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69949431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档