我想设置一个 cron 作业来运行我的 scrapy(python 脚本)
这就是我运行脚本的方法,并且它运行良好:
ubuntu@ip-1-2-3-4-:cd /home/ubuntu/scrapers/my_scraper/
ubuntu@ip-1-2-3-4-:~/scrapers/my_scraper$ scrapy crawl my_spider
现在我尝试将上述命令作为 cron 作业运行:
sudo crontab -e
添加了以下几行:
PATH=/home/ubuntu/.local/bin/
35 14 * * * cd /home/ubuntu/scrapers/my_scraper && scrapy crawl my_spider
这并不成功...我也无法诊断问题......如果我运行:
grep CRON /var/log/syslog
我得到以下输出:
Jul 12 06:47:01 ip-1-2-3-4 CRON[1451]: (root) CMD (test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ))
Jul 12 07:17:01 ip-1-2-3-4 CRON[1825]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jul 12 08:17:01 ip-1-2-3-4 CRON[1836]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jul 12 09:17:01 ip-1-2-3-4 CRON[1849]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jul 12 10:17:01 ip-1-2-3-4 CRON[1861]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jul 12 11:17:01 ip-1-2-3-4 CRON[1869]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jul 12 12:17:01 ip-1-2-3-4 CRON[1878]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jul 12 13:17:01 ip-1-2-3-4 CRON[1887]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jul 12 14:17:01 ip-1-2-3-4 CRON[1962]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jul 12 15:17:01 ip-1-2-3-4 CRON[1970]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jul 12 16:17:01 ip-1-2-3-4 CRON[1982]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jul 12 17:17:01 ip-1-2-3-4 CRON[1991]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jul 12 18:17:01 ip-1-2-3-4 CRON[2002]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jul 12 19:17:01 ip-1-2-3-4 CRON[2010]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jul 12 20:05:01 ip-1-2-3-4 CRON[2018]: (root) CMD ( test -x /etc/cron.daily/popularity-contest && /etc/cron.daily/popularity-contest --crond)
Jul 12 20:17:01 ip-1-2-3-4 CRON[2022]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jul 12 21:17:01 ip-1-2-3-4 CRON[2031]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jul 12 22:17:01 ip-1-2-3-4 CRON[2039]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jul 12 23:17:01 ip-1-2-3-4 CRON[2047]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jul 13 00:17:01 ip-1-2-3-4 CRON[2156]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jul 13 01:17:01 ip-1-2-3-4 CRON[2465]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jul 13 02:17:01 ip-1-2-3-4 CRON[2549]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jul 13 03:17:01 ip-1-2-3-4 CRON[2980]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Jul 13 04:17:01 ip-1-2-3-4 CRON[3033]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
这很奇怪,因为最近的一行是今天早上 4 点(当地时间是下午 2 点)的,所以不确定为什么没有记录任何错误?
注意:/home/ubuntu/.local/bin/
是 scrapy 所在的位置(我使用命令找到它which scrapy
)
更新(时区问题)
我没有收到任何错误的原因是我的时区错误,修复时区后,我收到以下错误:
scrapy:未找到
我也尝试使用 run-my-scraper.sh:
#!/bin/bash
cd /home/ubuntu/scrapers/my_scraper
PATH=$PATH:/usr/bin/python3
export PATH
/home/ubuntu/.local/bin/scrapy crawl my_spider
我测试了从控制台运行上述 shell 脚本并且它可以运行,然后我将其添加为 cron 作业,但结果仍然是相同的:
sudo crontab -e
添加了以下内容:
39 16 * * * ./home/ubuntu/scrapers/shell-scripts/run-my-scraper.sh
但仍然scrapy:未找到错误。
答案1
35 14 * * * cd /home/ubuntu/scrapers/my_scraper && scrapy crawl my_spider
也许尝试摆脱光盘命令。
答案2
在 newscript.sh 中
#!/bin/bash
su-ubuntu或者如果必要的话,设置 PATH=...因为你将 cronjob 设置为 sudo
cd /home/ubuntu/scrapers/my_scraper/
scrapy crawl my_spider
你说的部分已经起作用了 ^
在 crontab
35 14 * * * /home/blahblah/newscript.sh
...底线是,制作一个工作脚本,在 cron 作业中调用该脚本...确保它是可执行的。
答案3
我的时区有问题...我的服务器设置为 UTC,并且我使用澳大利亚时间设置 cron 作业,这就是我看不到任何错误消息的原因。
修复时区后,以下操作对我有用(感谢@Stephen Boston 的评论,他指出我需要使用 scrapy 的完整路径):
crontab -e
PATH=/usr/local/bin
56 18 * * * cd /home/ubuntu/scrapers/my_scraper && /home/ubuntu/.local/bin/scrapy crawl my_spider