【发布时间】:2021-12-16 12:26:01
【问题描述】:
为了在我的 Django 应用程序中定期执行任务,我安装了 django_crontab 扩展。我的应用由 dockerized 数据库和 Django 应用组成。
https://pypi.org/project/django-crontab/
我已按照设置段落中的说明完成了每一步。
settings.py
INSTALLED_APPS = [
...
'django_crontab',
]
...
CRONJOBS = [
('*/1 * * * *', 'config.cron.fun')
]
cron.py
def fun():
print("hello cron")
with open("./test.txt", "a") as f:
f.write("Hello")
我还在docker-entrypoint.yml中添加了cron作业:
python manage.py crontab add
python manage.py crontab show
输出:
webapp | no crontab for root
webapp | adding cronjob: (ebcca28ea3199afe6d09a445db5d5fd8) -> ('*/1 * * * *', 'config.cron.fun')
webapp | Currently active jobs in crontab:
webapp | ebcca28ea3199afe6d09a445db5d5fd8 -> ('*/1 * * * *', 'config.cron.fun')
在Dockerfile 我使用python:3.8 映像并安装cron:
RUN apt-get install -y cron && touch /var/log/cron.log
运行容器后没有任何反应。
当我进入容器时,可以看到cron看到了作业,但仍然没有执行。
root@bar:/back# crontab -l
*/1 * * * * /usr/local/bin/python /back/manage.py crontab run ebcca28ea3199afe6d09a445db5d5fd8 # django-cronjobs for config
我该如何解决?
编辑: 整个 Dockerfile:
FROM python:3.8
ENV PYTHONUNBUFFERED 1
RUN mkdir /back
WORKDIR /back
COPY . /back/
RUN apt-get update
RUN apt-get install -y cron && touch /var/log/cron.log
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
ENTRYPOINT ["python3", "manage.py"]
CMD ["runserver", "0.0.0.0:8080"]
docker-compose.yml:
version: "3"
services:
db:
image: postgres:latest
restart: unless-stopped
container_name: database
env_file:
- .env
webapp:
build: ./back
container_name: webapp
restart: unless-stopped
ports:
- "8000:8000"
env_file:
- .env
depends_on:
- db
links:
- db:db
volumes:
- ./back:/back
entrypoint: "bash /back/docker-entrypoint.sh"
command: "runserver 0.0.0.0:8000"
docker-entrypoint.yml - 这里进行了迁移,等待db 并提到crontab 命令
【问题讨论】:
-
主要容器进程是什么?您可以编辑问题以包含一个完整的示例,包括整个 Dockerfile 吗?你提到了一个
docker-entrypoint.yml文件;什么解释和运行该文件? -
@DavidMaze 完成