使用scrapy的时候,有时候不想每次都手动敲命令行,就可以使用crontab配置scrapy定时任务在后台运行,这样不用人工干预,每个周期都可以定时自动执行啦。本文主要介绍两方面:
1、crontab的用法 2、使用crontab配置scrapy定时任务。
一、crontab
crontab是什么
crontab 是 Linux 的一个计划任务管理工具,你可以在那上面添加一些任务,在指定的时间让它在后台运行,经常用来定时清除系统或程序的缓存,可以定时执行任意的脚本等等,这些功能在 Linux 上都是非常有用的,尤其是当 Linux 做为服务器来用时。
crontab常用命令
命令 | 解释 |
---|---|
crontab -l | 列出当前的定时任务列表 |
crontab -e | 执行编辑器来设定时任务 |
定时任务设置格式
格式:[分] [时] [日] [月] [周] [执行的操作]
例:00 19 * * * python /root/spider/test.py
每天19:00执行python /root/spider/test.py (注意一定要是绝对路径)
常用符号 :
星号(*):代表所有可能的值,如month字段为星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。
以下是几个例子:
1、每分钟执行一次:* * * * * command
2、每一小时执行一次 :00 * * * * command
(精确时间点) or * */1 * * * command
( / 表示频率)
3、每小时的15和30分各执行一次 15,45 * * * * command
(, 表示并列)
4、在每天上午 8- 11时中间每小时 15 ,45分各执行一次:15,45 8-11 * * * command
(- 表示范围)
5、每个星期一的上午8点到11点的第3和第15分钟执行:3,15 8-11 * * 1 command
6、每隔两天的上午8点到11点的第3和第15分钟执行:3,15 8-11 */2 * * command
二、crontab与scrapy的结合
通常运行scrapy需要进入到该scrapy项目的文件夹下,所以我们不能直接scrapy crawl 项目
。
例如我需要每天19:00运行我部署的某天气网站的scrapy爬虫,名为chinaweather:
操作如下
1、我们需要先 cd
进入到该scrapy项目的根目录下
2、scrapy命令需要使用绝对路径,如果找不到,可以在命令行输入which scrapy
找到。如:/usr/local/anaconda/bin/scrapy
3、这个scrapy运行的时候会打印一些日志,我们用>>
可以把它统一追加到一个文件中,方便检查scrapy是否正常运行。 (需要注意的是>
是覆盖重写,>>
是追加操作)
使用crontab -e 编辑后:1
00 19 * * * cd /root/spider/weather && /usr/local/anaconda/bin/scrapy crawl chinaweather >> /root/spider/weather/weather_history.log
即可添加到定时任务,最后保存退出,就会显示任命了新的定时任务: