使用crontab部署定时任务
什么是Crontab?
Crontab命令是Unix系统和类Unix系统中,用来设置周期性执行的指令。该命令从标准输入设备读取指令,并将其存放在“Crontab”文件中,以供后期读取和执行。Crontab所存的指令,被守护进程激活。crond常常在后台运行,以一分钟为间隔检查是否有预定的作业需要执行,这类作业一般成为cron jobs。-
打开Ubuntu中的crontab功能
在Ubuntu中,crontab功能默认是关闭的,需要我们自己打开。
sudo vim /etc/rsyslog.d/50-default.conf
# Default rules for rsyslog. # # For more information see rsyslog.conf(5) and /etc/rsyslog.conf # # First some standard log files. Log by facility. # auth,authpriv.* /var/log/auth.log *.*;auth,authpriv.none -/var/log/syslog cron.* /var/log/cron.log #daemon.* -/var/log/daemon.log kern.* -/var/log/kern.log #lpr.* -/var/log/lpr.log mail.* -/var/log/mail.log #user.* -/var/log/user.log # # Logging for the mail system. Split it up so that # it is easy to write scripts to parse these files. # #mail.info -/var/log/mail.info #mail.warn -/var/log/mail.warn mail.err /var/log/mail.err # # Some "catch-all" log files. # #*.=debug;\ # auth,authpriv.none;\ # news.none;mail.none -/var/log/debug #*.=info;*.=notice;*.=warn;\ # auth,authpriv.none;\ # cron,daemon.none;\ # mail,news.none -/var/log/messages # # Emergencies are sent to everybody logged in. # *.emerg :omusrmsg:* # # I like to have messages displayed on the console, but only on a virtual # console I usually leave idle. # #daemon,mail.*;\ # news.=crit;news.=err;news.=notice;\ # *.=debug;*.=info;\ # *.=notice;*.=warn /dev/tty8
将cron.* /var/log/cron.log 取消注释
然后重启系统服务,使改动生效:
sudo service syslog restart
-
添加定时任务
首先创建自己的脚本文件并依次写入需要执行的命令
使用
crontab -e
命令来打开当前命令所属的crontab文件,如涉及root用户权限请使用sudo crontab -e
第一次使用该命令会让你选择编辑器,我选择2使用vim
打开文件后在最后一行添加crontab命令,例如:
0 0 * * * sh ~/mysh.sh(需要执行的脚本文件路径)
命令需要执行的脚本文件一定要使用绝对路径
-
crontab命令格式
例如:
*/1 * * * * 每分钟执行一次
0 * * * * 每小时执行一次
0 0 * * * 每天执行一次
0 0 * * 0 每周执行一次
0 0 1 * * 每月执行一次
0 0 1 1 * 每年执行一次最后重启cron服务:
sudo service cron restart
-
定时执行scrapy项目实战
脚本的逻辑就是先进去到爬虫所在的文件夹然后执行scrapy crawl yourSpider(你的爬虫的名称)
有个注意点就是scrapy在脚本中要写它的绝对路径,通过命令which scrapy来获取路径- 编写脚本文件:
vim /home/timedtasks/my_spider.sh
cd /home/project/test_scrapy/test_scrapy/spider /home/anaconda3/envs/test_env/bin/scrapy crawl test_spider
添加定时任务:
sudo contab -e
在最后一行添加任务:0 13 * * * sh /home/timedtasks/my_spider.sh
保存并退出esc :wq重启cron服服务:
sudo service cron restart
完成!
- 编写脚本文件: