环境变量当cron运行python脚本时

24 python cron environment-variables

我一直在寻找其他堆栈溢出问题,但无法工作.我有一个使用环境变量的python脚本.这个脚本在直接运行时完全按计划运行,但是我想暂时每分钟将它作为一个cron作业运行.

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

* * * * * root /usr/bin/python3.5 /code/scraper.py
Run Code Online (Sandbox Code Playgroud)

这会运行python脚本,但脚本会失败,因为在脚本中我使用了两个环境变量.

我读过我应该将SHELL =/bin/bash添加到cron文件中,所以我做了但这没有用.

SHELL=/bin/bash
* * * * * root /usr/bin/python3.5 /code/scraper.py
Run Code Online (Sandbox Code Playgroud)

然后我读了

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

SHELL=/bin/bash
* * * * * . $HOME/.profile; root /usr/bin/python3.5 /code/scraper.py
Run Code Online (Sandbox Code Playgroud)

但这导致cron完全停止运行.将env变量"发送"到cron的最佳方法是什么?

Lou*_*uis 5

而不是执行~/.profile我所做的全部工作是移动必须在cron作业和具有配置文件的帐户之间共享的变量,然后我将~/.profile在cron作业中和cron作业中同时提供这些变量.

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

这是我在这里测试过的示例设置:

*/1 * * * * someuser . /tmp/t10/setenv && /usr/bin/python /tmp/t10/test.py
Run Code Online (Sandbox Code Playgroud)

我已将其设置为每分钟执行一次以进行测试.替换someuser为有意义的东西./tmp/t10/setenv我使用的脚本有这个:

export FOO=foovalue
export BAR=barvalue
Run Code Online (Sandbox Code Playgroud)

/tmp/t10/test.py文件有这个:

import os

print os.environ["FOO"], os.environ["BAR"]
Run Code Online (Sandbox Code Playgroud)

我的cron通过电子邮件发送了它运行的脚本的输出.我收到了一封包含此输出的电子邮件

foovalue barvalue
Run Code Online (Sandbox Code Playgroud)


fab*_*ira 4

您可以内联设置环境变量:

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

另一种方法是使用honcho来传递带有环境变量的文件。

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