在开发的过程当中,由很多任务是需要定时执行的,比如:
1、今天晚上10:00重启服务器。
2、每天下午发送日报邮件。
类似这样的任务很多,当然可以人为的执行,但是为了执行的可靠性,还是让计算机来执行比较好,在linux下由定时任务可以完成上面的需求,但是linux对定时任务做了划分:
1、例行计划任务:循环发生,每次发生的时间是固定的,比如上面的案例1;
2、突发计划任务:突然发生,只执行一次,比如上面的案例2;
例行计划任务
例行的任务,在linux下使用的cron系统服务控制的,因为linux本身就有很多的例行计划任务,所有这个服务默认是开启的,并且为了方便用户使用,linux提供了crontab命令来让用户设置定时任务,这里有几个点需要明确:
1、crontab命令有用户限制的,为了执行安全,在/etc下有专门的配置文件:
cron.allow,记录允许使用计划任务的用户。
cron.deny,记录不允许使用计划任务的用户。
两个配置文件有优先级关系,cron.allow的优先级会高于cron.deny,但是通常linux默认保留cron.deny,毕竟一般情况下,允许使用的用户可能比不允许的要广泛。
2、使用crontab命令简历计划任务之后,这个任务会被记录到/var/spool/cron/下,比如root使用了计划任务,那么就会有/var/spool/cron/root,这个文件不要直接编辑,会影响到定时任务的执行,而真正定时任务执行的日志文件是在/var/log/cron下
定时任务命令
基础命令
crontab [-u] [-e|-l|-r] "定时任务"
-u 指定执行的用户
-e 编辑定时任务清单
-r 删除定时任务
定时任务格式
定时任务的格式是 时间 执行命令的格式,其中时间有5个维度
分 时 日 月 周
通过这五个时间维度,可以描述一个时间节点或者是一个时间周期,我们具体看案例:
定时任务的配置分为2部分,一部分是时间,一部分是命令,以一个爬虫脚本为例:
#每小时执行一次
0 * * * * /usr/bin/python3 spider.py
#每五分钟执行一次
*/5 * * * * /usr/bin/python3 spider.py
#每两个小时执行一次
* */2 * * * /usr/bin/python3 spider.py
#每小时的第8分钟和10十分钟执行一次
8,10 * * * * /usr/bin/python3 spider.py
#每天的晚上8点到12点的第8分钟和10十分钟执行一次
8,10 20-24 * * * /usr/bin/python3 spider.py
更具上面的案例我们可以总结出:
1、/代表每,但是,如果是每小时,每天,每周,不是用斜杠,而是采用在前一个时间上加0,比如每小时执行一次,写法是
0 * * * * /usr/bin/python3 spider.py
2、,代表单独的一个时间节点
3、-代表一个时间的范围
4、* 代表任意一个时间
关于定时任务先聊这么多,欢迎各位大佬多多指点。