访问 AKS pod 中的环境变量时出现按键错误

问题描述 投票:0回答:1

我的 Python 脚本使用环境变量,环境变量由 Azure

configmap
设置,并且可以从 pod 命令提示符访问它们。当我在 pod 命令行上手动运行时,它们也可用于 Python,但当程序按
crontab
计划运行时,环境变量可用。它失败并出现以下错误。

Traceback (most recent call last):
  File "/app/fraudblk.py", line 6, in <module>
    from someLib import SomeFunc
  File "/app/someLib .py", line 920, in <module>
    userName = os.environ["CSI_USER"]
               ~~~~~~~~~~^^^^^^^^^^^^
  File "<frozen os>", line 714, in __getitem__
KeyError: 'CSI_USER'

尝试使用Python 3.7。

python cron azure-aks keyerror
1个回答
0
投票

您在 crontab 计划中遇到环境变量

KeyError
的主要原因是 crontab 不像 shell 会话或正在运行的应用程序那样继承环境变量。这意味着虽然这些变量在手动运行 Python 脚本时可用,但默认情况下,当脚本通过 crontab 运行时它们不可用。要解决这个问题,您需要确保 crontab 可以访问 ConfigMap 设置的环境变量。

解决方法 - 在 Crontab 中手动设置环境变量

kubectl exec -it <podname> -- /bin/bash
printenv | grep CSI

将相关环境变量(

CSI_USER
CSI_PASS
)复制到你的crontab中

* * * * * CSI_USER=my-user CSI_PASS=my-pass /usr/bin/python3 /app/fraudblk.py >> /tmp/output.log 2>&1

这会在 crontab 中运行脚本之前显式设置环境变量。

这是最简单的方法。但是,还有其他两种方法。如果你愿意的话,你可以检查一下—— 一种是从 crontab 条目中的

/proc/1/environ
获取环境变量

* * * * * . /proc/1/environ && /usr/bin/python3 /app/fraudblk.py >> /tmp/output.log 2>&1

另一种方法是创建一个脚本来获取环境变量并运行 Python 脚本,然后通过 crontab 运行该脚本

示例-

#!/bin/bash
. /proc/1/environ
/usr/bin/python3 /app/fraudblk.py

保存并使其可执行

chmod +x run_script.sh

enter image description here

修改 crontab 条目以运行此脚本

* * * * * /app/run_script.sh >> /tmp/output.log 2>&1

enter image description here

查看此文档

© www.soinside.com 2019 - 2024. All rights reserved.