这是我的 cron 任务:
*/10 * * * * export DISPLAY=:99 #this is to open a port by Xvfb
*/10 * * * * python Crawler.py #this file will use a selenium to script the data through firefox browser.
目前我正在使用 aws EC2 Ubuntu OS 来运行此作业。如果我通过终端手动输入此命令,它会运行良好。所有抓取结果都保存在正确的目录路径下。但是当我使用 cron 作业运行时,没有生成任何文件。我通过 /var/log/syslog 查看 cron 作业日志,它表明 cron 作业已经执行。那么导致该问题的原因是什么?
Oct 26 02:00:01 ip-172-31-28-165 CRON[6415]: (ubuntu) CMD (run_crawler)
Oct 26 02:17:01 ip-172-31-28-165 CRON[6422]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Oct 26 03:17:01 ip-172-31-28-165 CRON[6459]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Oct 26 04:00:01 ip-172-31-28-165 CRON[6473]: (ubuntu) CMD (run_crawler)
Oct 26 04:17:01 ip-172-31-28-165 CRON[6519]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Oct 26 05:17:01 ip-172-31-28-165 CRON[6549]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Oct 26 06:00:01 ip-172-31-28-165 CRON[6577]: (ubuntu) CMD (run_crawler)
Oct 26 06:17:01 ip-172-31-28-165 CRON[6763]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
答案1
抱歉,但这 2 个命令是分开执行的。
*/10 * * * * export DISPLAY=:99
不知道
*/10 * * * * python Crawler.py
如果“Crawler.py”需要 DISPLAY,则需要将第一个命令放入第二个命令中。
除此之外:最好在“python”和“Crawler.py”前面都包含路径。
我认为它需要是类似这样的东西......
*/10 * * * * DISPLAY:99 && /usr/bin/python /usr/bin/local/Crawler.py
如果 python 在/usr/bin/
并且你在 中编写脚本/usr/bin/local/
。
但还有更好的方法:
使用包装器。它是一个独立的包装器,您可以将其用作上下文管理器:
from xvfbwrapper import Xvfb
with Xvfb() as xvfb:
# rest of your script goes here (start/stop etc)
- 这话题stackoverflow 上有更多关于使用“selenium”的信息。
- 还有趣的:Seleniumhq 插件