首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >cron运行python脚本时的环境变量

cron运行python脚本时的环境变量
EN

Stack Overflow用户
提问于 2017-02-08 21:52:07
回答 5查看 21.9K关注 0票数 28

我一直在寻找其他堆栈溢出问题,但没有得到任何工作。我有一个使用环境变量的python脚本。这个脚本在直接运行时完全按照计划工作,但是,我现在想每分钟将其作为cron作业运行。

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

代码语言:javascript
复制
* * * * * root /usr/bin/python3.5 /code/scraper.py

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

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

代码语言:javascript
复制
SHELL=/bin/bash
* * * * * root /usr/bin/python3.5 /code/scraper.py

然后我读到

在命令之前,在crontab中添加

。$HOME/.profile。

代码语言:javascript
复制
SHELL=/bin/bash
* * * * * . $HOME/.profile; root /usr/bin/python3.5 /code/scraper.py

但这导致cron完全停止运行。将环境变量“发送”到cron的最佳方式是什么?

EN

回答 5

Stack Overflow用户

发布于 2017-02-11 07:27:42

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

您在问题中显示的最后一次尝试的格式不正确。用户id应该紧跟在日程安排信息之后,但是您在用户id之前添加了配置文件的来源,这肯定不起作用。

下面是我在这里测试过的一个示例设置:

代码语言:javascript
复制
*/1 * * * * someuser . /tmp/t10/setenv && /usr/bin/python /tmp/t10/test.py

出于测试目的,我将其设置为每分钟执行一次。用有意义的东西替换someuser。我使用的/tmp/t10/setenv脚本具有以下内容:

代码语言:javascript
复制
export FOO=foovalue
export BAR=barvalue

/tmp/t10/test.py文件包含以下内容:

代码语言:javascript
复制
import os

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

我的cron将它运行的脚本的输出通过电子邮件发送给我。我收到一封电子邮件,输出如下:

代码语言:javascript
复制
foovalue barvalue
票数 10
EN

Stack Overflow用户

发布于 2017-02-11 06:44:53

您可以设置env变量内联:

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

另一种方法是使用honcho,这样你就可以传递一个带有环境变量的文件。

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

票数 4
EN

Stack Overflow用户

发布于 2017-02-11 17:16:35

您可以通过以下方式指定两个环境变量:

代码语言:javascript
复制
* * * * * root env A=1 B=2 /usr/bin/python3.5 /code/scraper.py

env是一个系统程序,它使用其他变量运行指定的程序:

代码语言:javascript
复制
$ env A=1 B=2 /bin/sh -c 'echo $A$B'  # or just 'sh': would search in $PATH
12
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42114982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档