在Python cronjob中设置Docker环境变量

2024-10-02 02:24:08 发布

您现在位置:Python中文网/ 问答频道 /正文

关于我的问题,我已经看到了很多问题,但似乎没有一个解决方案有效。我有一个Docker容器,它运行python脚本cronjob,现在我希望它每分钟都运行一次。由于某些原因,它无法捕获环境变量

我的环境变量在.env文件中设置。我有一个docker compose文件,它将.env文件读入cron容器。为了减少长度,我不会发布docker compose或.env文件

这是我的cron容器Dockerfile,cronpy是cronjob的定义:

FROM python:3.9.0
ENV PYTHONUNBUFFERED 1
RUN apt-get update &&\
    apt-get install -y libldap2-dev\
                       libsasl2-dev\
                       xmlsec1\
                       cron &&\
    pip install --upgrade --trusted-host pypi.org --trusted-host files.pythonhosted.org pip

RUN mkdir /code
WORKDIR /code

COPY requirements.txt /code/
RUN pip install --upgrade --trusted-host pypi.org --trusted-host files.pythonhosted.org -r requirements.txt

COPY . /code/
COPY ./cronpy /etc/cron.d/cronpy

# Apply cron job
RUN crontab /etc/cron.d/cronpy

ENTRYPOINT ["/code/config/cron.sh"]

在我的入口点脚本中,我创建了一个新脚本cron_env.sh,其中包含我需要的所有环境变量:

#!/usr/bin/env bash
set +e
set +x

env > cron_config

rm -f cron_env.sh

while read -r assignment; do
  echo "export ${assignment}" >> cron_env.sh
done < cron_config

chmod 755 cron_env.sh
rm -f cron_config

cron -f

然后,在我的cronpy文件中,我在运行命令之前获取变量的源代码:

* * * * * root . /code/cron_env.sh; /usr/local/bin/python /code/manage.py capture_usage_metrics --type all > /proc/1/fd/1 2>&1

我仍然收到未设置env变量的错误。cron_env.sh文件创建得很好


Tags: install文件runorgenv脚本confighost

热门问题