【发布时间】:2021-04-29 05:30:15
【问题描述】:
我正在使用 crontab 在 docker 容器中运行 python 脚本。另外,我在项目目录的.env 文件中设置了一些环境变量(如数据库主机、密码等)。如果我在容器 (python3 main.py) 内手动运行脚本,一切正常。但是当脚本由 crontab 运行时,找不到环境变量 (None)。
我有以下设置:
Dockerfile
FROM ubuntu:latest
RUN apt-get update -y
RUN apt-get -y install cron
RUN apt-get install -y python3-pip python-dev
WORKDIR /home/me/theservice
COPY . .
RUN chmod 0644 theservice-cron
RUN touch /var/log/theservice-cron.log
RUN chmod +x run.sh
ENTRYPOINT ./run.sh
run.sh
#!/bin/bash
crontab theservice-cron
cron -f
docker-compose.yml
version: '3.7'
services:
theservice:
build: .
env_file:
- ./.env
服务-cron
HOME=/home/me/theservice
* * * * * python3 /home/me/theservice/main.py >> /var/log/theservice-cron.log 2>&1
#* * * * * cd /home/me/theservice && python3 main.py >> /var/log/theservice-cron.log 2>&1
我假设 cronjob 正在另一个目录中运行,并且在 /home/me/theservice/.env 中设置的环境变量无法访问。所以我尝试在theservice-cron 文件中添加HOME=/home/me/theservice 行,或者只是在运行脚本之前执行/home/me/theservice,但它没有帮助。
在python脚本中,我使用os来访问环境变量
import os
print(os.environ['db_host'])
我该如何解决这个问题?
【问题讨论】:
-
cron 默认情况下不会加载你的环境变量,你有没有尝试将它们作为 cron 条目的一部分加载,如 unix.stackexchange.com/a/27291
-
@chris-doyle,我在
python3命令之前添加了. /home/me/theservice/.env;,但似乎没有帮助。
标签: python docker docker-compose cron environment-variables