在 Anaconda 环境中从 cron 运行 python 代码

在 Anaconda 环境中从 cron 运行 python 代码

我需要使用特定的 anaconda 环境运行 python 脚本,因为我需要每天多次执行该脚本,所以我想使用 linux crontab 文件(/etc/crontab)来执行此操作。

当我从 linux 命令行启动脚本时,它工作正常:

~/anaconda2/envs/py36/bin/python ~/production/web_scraping.py

我将进程添加到 crontab 文件中:

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user  command
57 08 * * * user ~/anaconda2/envs/py36/bin/python ~/production/web_scraping.py | touch ~/test.txt

该行被 cron 正确执行,这是 cron 日志:

user@exmachina:~$ sudo cat /var/log/syslog | grep web_*
Jan  2 08:57:02 localhost CRON[10854]: (user) CMD (~/anaconda2/envs/py36/bin/python ~/web_scraping.py | touch ~/test.txt) 

我添加了| touch test.txt到 cron 行以确保该行被执行,并且测试.txt文件已生成。

python 脚本使用 Selenium 通过 chrome webdriver 从网页中提取数据。这可能是脚本从命令行运行良好但不能从 cron 文件运行的原因吗?

感谢您的帮助!

答案1

相反,使用(或)| touch ~/test.txt会提供更多信息。| tee ~/test.txttee -a

考虑合并env|sort; id; date到您记录的输出中。

您在描述 selenium 脚本以及它从 cron 中“运行不正常”的方式时非常模糊。所有的都import成功了,还是 PYTHONPATH 可能不正确?运行conda env update -f environment.yml然后执行 cron 作业source activate xxx以便该作业提取适当的库版本是否有帮助?

包括 PATH 和 LD_LIBRARY_PATH 在内的一些变量对于您的浏览器可能很重要,当您查看记录的值时,您可能会发现它们与 selenium 正常工作的交互式环境不同。设置 cron 作业的一部分是复制环境的各个方面,以便作业能够成功。

相关内容