python - 在 Python cronjob 中设置 Docker 环境变量
问题描述
关于我的问题,我已经看到了多个关于 SO 的问题,但似乎没有一个解决方案有效。我有一个运行 python 脚本 cronjob 的 Docker 容器,目前我希望它每分钟运行一次。由于某种原因,它无法捕获环境变量。
我的环境变量设置在 .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
我仍然收到未设置环境变量的错误。该cron_env.sh
文件正在创建良好。
解决方案
我弄清楚了这个问题。其中一个环境变量有特殊字符,导致cron_env.sh
脚本失败。
推荐阅读
- python - 将 CP-SAT Solver 用于非线性目标函数
- sapui5 - 如何使用 UIVeri5 将文本写入 sap.m.Input?
- node.js - 如何从节点js中的数组中获取文件名值
- tensorflow - 使用 TensorFlow 2 将 Dropout 添加到 MobileNet
- jquery - 如何使用 JQuery 从我的 JSON url 文件中检索两个值并应用于 Html?
- python-3.x - python3 接受一个回调,该回调可能接受一个参数并且可能不接受
- javascript - 如何在 MomentJS 中格式化时间/持续时间,使其以小时、分钟和秒为单位
- c++ - Visual Studio + cmake 混淆
- rabbitmq - MassTransit 中的标头序列化不正确
- reactjs - 使用钩子 POST 请求成功后重新加载页面