我一直在寻找其他堆栈溢出问题,但无法工作 . 我有一个使用环境变量的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的最佳方法是什么?
5 回答
我不会执行整个
~/.profile
,而是移动必须在cron
作业和具有该配置文件的帐户之间共享的变量,然后我将在~/.profile
和cron作业中同时提供这些变量 .您在问题中显示的最后一次尝试未正确格式化 . 用户ID应该在调度信息之后,但是您已经在用户ID之前添加了配置文件的源,这肯定无法工作 .
这是我在这里测试过的示例设置:
我已将其设置为每分钟执行一次以进行测试 . 用有意义的东西替换
someuser
. 我使用的/tmp/t10/setenv
脚本有这个:/tmp/t10/test.py
文件有这个:我的cron通过电子邮件发送了它运行的脚本的输出 . 我收到了一封包含此输出的电子邮件
您可以将env变量设置为内联:
* * * * * root ENV_VAR=VALUE /usr/bin/python3.5 /code/scraper.py
另一种方法是使用honcho,您可以传递带有env变量的文件 .
honcho -e /path/to/.env run /code/scraper.py
您可以通过以下方式指定两个环境变量:
env
是一个运行带有其他变量的指定程序的系统程序:这是我喜欢的方法之一,编写脚本来设置环境并以其参数作为参数执行脚本
set_env_to_process.sh
用法
/usr/bin/python3.5 /code/scraper.py
被视为set_env_to_process.sh
set_env_to_process.sh
的输入,为脚本运行设置正确的env它可以用作命令行,cron,sudo,ssh来设置env
您可以将它添加到crontab的顶部,并使其不受版本控制 . 假设导致您遇到困难的环境变量是
export DJANGO_SECRET_KEY="FOOBAR_1241243124312341234"
:crontab
my_cool_script.sh
当有问题的环境变量需要保密并且现有.bashrc的加载因任何原因不能很好时,这对我来说效果很好 .