当cron运行python脚本时的环境变量是什么?

  • 回答 (2)
  • 关注 (0)
  • 查看 (169)

我一直在寻找其他堆栈溢出的问题,但不能得到任何工作。我有一个使用环境变量的Python脚本。这个脚本在直接运行时完全按照计划运行,但是我希望暂时将它作为一个cron作业运行。

目前在我的cron.d目录中,我有一个名为scrapers的文件,其中包含:

* * * * * root /usr/bin/python3.5 /code/scraper.py

这将运行python脚本,但脚本失败,因为脚本中使用了两个环境变量。

我读了我应该添加SHELL = / bin / bash到cron文件,所以我做了,但这没有帮助。

SHELL=/bin/bash
* * * * * root /usr/bin/python3.5 /code/scraper.py

然后我读了

在crontab中,在你命令之前,添加.$ HOME / .profile文件。

SHELL=/bin/bash
* * * * * . $HOME/.profile; root /usr/bin/python3.5 /code/scraper.py

但是这导致了cron完全停止运行。将env变量发送给cron的最佳方式是什么?

大叔也犯二大叔也犯二提问于
葉天楓梦想是要有的,万一实现了呢回答于

可以内联设置env变量:

* * * * * root ENV_VAR=VALUE /usr/bin/python3.5 /code/scraper.py

另一种方法是使用honcho,你可以通过env变量传递文件。

honcho -e /path/to/.env run /code/scraper.py

青蛙克星哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈回答于

而不是执行整个~/.profile我所做的是移动必须在cron工作和具有该配置文件的帐户之间共享的变量,然后我会~/.profile在cron作业中以及在cron作业中采用这些变量。

你在问题中显示的最后一次尝试未正确格式化。用户标识应该在调度信息之后,但已在用户标识之前添加了配置文件的源代码,这肯定无法工作。

这里有一个我在这里测试过的示例设置:

*/1 * * * * someuser . /tmp/t10/setenv && /usr/bin/python /tmp/t10/test.py

我已经将它设置为每分钟执行一次测试目的。用someuser有意义的东西代替。/tmp/t10/setenv我使用的脚本有这样的:

export FOO=foovalue
export BAR=barvalue

/tmp/t10/test.py文件中有:

import os

print os.environ["FOO"], os.environ["BAR"]

我的cron给我发送了它运行的脚本的输出。我收到了一封包含这个输出的邮件:

foovalue barvalue

扫码关注云+社区

领取腾讯云代金券