我需要使用特定的 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.txt
tee -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 作业的一部分是复制环境的各个方面,以便作业能够成功。