我一直在寻找其他堆栈溢出问题,但没有得到任何工作。我有一个使用环境变量的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完全停止运行。将环境变量“发送”到cron的最佳方式是什么?
发布于 2017-02-11 07:27:42
我要做的不是执行整个~/.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
发布于 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
发布于 2017-02-11 17:16:35
您可以通过以下方式指定两个环境变量:
* * * * * 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
https://stackoverflow.com/questions/42114982
复制相似问题