【发布时间】:2018-10-08 19:02:30
【问题描述】:
我有一个 Python 脚本,它可以从如下环境变量中获取一条数据:
password = os.environ["SomePassword"]
当我手动运行脚本时,脚本按预期工作,但是当脚本在 shell 文件中并由 cron 作业运行时,它在该行失败并显示“KeyError”,我认为它没有找到变量。
此外,当我以运行 cron 作业的同一用户身份运行以下任何操作时,我会看到预期的变量。
echo $SomePassword
env
printenv
发生了什么,我该如何解决?
更新: 我能够通过阅读建议的重复问题来解决此问题 - 但是,该问题并未描述其他人可能感兴趣的根本问题。
【问题讨论】:
-
谢谢,那一定是我没看过的一篇文章。这导致我将它添加到我的 bash 脚本“source /home/myuser/.profile”中并且有效。我仍然想了解这是如何工作的。我使用运行 cron 作业的同一用户手动运行它,它运行良好 - bash 脚本和 cron 作业有什么不同?
-
Cron 作业由对您的环境一无所知的系统用户运行,即不读取您的 .bashrc 或 .profile。因此,默认情况下,当 cron 运行时,您在登录会话期间放置的任何内容都不会出现。
man 5 crontab会告诉你存在哪些环境变量以及很多有用的信息。 -
crontab 是在 UserX 下设置和运行的,所以我很奇怪它看不到自己的配置文件。当我 sudo 进入 UserX 时,我可以看到变量。
-
cron 由
root用户运行。 su 到 root 和 chck 如果你的环境变量在那里,他们不应该。
标签: bash python-3.x