我有一个使用环境变量的 Python 脚本。该脚本直接运行时完全按照计划工作;但是,我想暂时将它作为 cron 作业每分钟运行一次。
目前在我的 cron.
目录中,我有一个名为 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 的最佳方式是什么?
原文由 user6723321 发布,翻译遵循 CC BY-SA 4.0 许可协议
而不是执行整个
~/.profile
我要做的是移动必须在你的cron
作业和具有配置文件的帐户之间共享的变量,然后我将这两个来源在~/.profile
和 cron 作业中。您在问题中显示的最后一次尝试格式不正确。用户 ID 应该紧跟在调度信息之后,但是您已经在用户 ID 之前添加了配置文件的来源,这肯定行不通。
这是我在这里测试过的示例设置:
出于测试目的,我已将其设置为每分钟执行一次。将
someuser
替换为有意义的内容。我使用的/tmp/t10/setenv
脚本有这个:/tmp/t10/test.py
文件有这个:我的 cron 将它运行的脚本的输出通过电子邮件发送给我。我收到一封包含此输出的电子邮件: