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

2024-05-12 04:19:53 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

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

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

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

然后我读了

In the crontab, before you command, add . $HOME/.profile.

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

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


Tags: 文件py脚本bashhomebin堆栈usr
3条回答

我要做的不是执行整个~/.profile而是移动必须在cron作业和拥有概要文件的帐户之间共享的变量,然后我将这些变量都源于~/.profile和cron作业。

您在问题中显示的最后一次尝试的格式不正确。用户id应该紧跟在调度信息之后,但是您已经在用户id之前添加了概要文件的源代码,这肯定无法工作。

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

*/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

可以内联设置env变量:

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

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

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

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

* * * * * root env A=1 B=2 /usr/bin/python3.5 /code/scraper.py

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

$ env A=1 B=2 /bin/sh -c 'echo $A$B'  # or just 'sh': would search in $PATH
12

相关问题 更多 >