day18定时任务

什么是定时任务

类似日常生活之中的闹钟;主要用于定时执行某些命令,达到定时处理数据的作用。
作用:
    1、类似生活中使用的闹钟
    2、可以自动完成操作命令
    3、定时备份系统数据信息

定时任务的软件的种类

1、linux操作系统自带的软件:crontab
2、第三方的定时任务软件:atd、anacron
3、WEB定时软件:PPGo_Job
4、基于etcd的定时任务系统

crontab命令

    crontab命令:被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
    
    /etc/cron.deny     该文件中所列用户不允许使用crontab命令
    /etc/cron.allow    该文件中所列用户允许使用crontab命令
    /var/spool/cron/   所有用户crontab文件存放的目录,以用户名命名  # 所有的定时任务文件存放地方
    
    # 格式:
    	minute   hour   day   month   week    command   # 顺序:分 时 日 月 周
    	
    	minute		: 表示分钟,可以是从0到59之间的任何整数。
    	hour		:表示小时,可以是从0到23之间的任何整数
    	day			:表示日期,可以是从1到31之间的任何整数
    	month		:表示月份,可以是从1到12之间的任何整数
    	week		:表示星期几,可以是从0到7之间的任何整数(这里的0和7代表星期日)
    	command		: 要执行的命令,可以是系统命令,也可以是自己编写的脚本文件
    	
	# 特殊字符:
        *  :表示每的意思,例如:“每天、每月、每小时”
        ,  :可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
        -  :可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
        /  :可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
        
     # 参数:
         -l :列表,查看已经设置的定时任务
         -e :edit,编辑定时任务
         -u :user,查看特定用户下定时任务
         #  /var/spool/cron/存放位置,以当前用户名作为文件名

crond服务

在Linux系统中:
    cron是定时任务的软件名,
    crond是服务进程名,真正实现定时任务服务。
    crontab命令是用来设置定时时间任务规则的配置命令
    
要想配置定时任务,首先要开启crond服务。
    systemctl start crondd.service    //启动服务
    systemctl syop crondd.service    //关闭服务
    systemctl status crondd.service  //查看状态
    /sbin/service crond reload   //重新载入配置
    
    1、查看crontab服务状态
    	[root@localhost ~]# service crond status
    	
    2、手动启动crontab服务:
    	[root@localhost ~]# service crond start
    	
    3、查看crontab服务是否已设置为开机启动,执行命令:
    	[root@localhost ~]# ntsysv
    	
    4、加入开机自动启动:
    	[root@localhost ~]# systemctl disable crond.service
    	[root@localhost ~]# enable crond.service

系统时间校准

系统时间和网络时间不同步解决方法:
	[root@localhost ~]# yum install ntpdate -y    # 第一步:安装时间服务软件
	[root@localhost ~]# ntpdate ntp.aliyun.com    # 第二步:更新网络时间

定时任务加在哪里

1、定时任务配置文件

定时任务配置文件
	1)定时目录(需要执行的命令必须放在文件当中,同时也必须加上可执行权限)# /bin/sh 可以不用加执行权限
        /etc/cron.hourly		: 每小时执行一次  # 例如:/bin/sh /etc/cron.hourly 相当于加了执行权限
        /etc/cron.daily			: 每天执行一次
        /etc/cron.weekly		: 每周执行一次
        /etc/cron.monthly		: 每月执行一次
        
	2)、定时任务的配置文件
		/etc/crontab     # 系统定时任务的配置文件之一
	
	3)、定时任务编写文件
		crontab -e	:编辑定时任务(用户可以省略,默认是当前用户)
		crontab -l	:查看定时任务(只查看当前用户的定时任务)
		
		例如:在设置时间段里创建一个文件
			[root@localhost ~]# crontab -e
			55 15 * * * touch /opt/1.txt
			
	4)、黑洞设备:/dev/null
	[root@localhost ~]# crontab -e
		0 */1 * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null
		
		&>/dev/null :黑洞设备  # 会把电脑产生的垃圾定向到/dev/null,会消失

2、用户定时任务

用户定时任务
	1)、定时任务的格式
	#     分      时     日     月      周     运行命令
		minute   hour   day   month   week    command   # 顺序:分 时 日 月 周
		
		user-name 指的是执行这个定时任务的用户
		
		案例1:要求在每天凌晨3点45分执行一次
			45 3 * * *
			
		案例2:要求在每天凌晨3点45分以root用户执行/root/1.sh一次
			45 3 * * * root/root/1.sh
			
    2)、定时任务保存的地方 # /var/spool/cron
        所有的用户定时任务都保存在 /var/spool/cron 目录中,当用户增加定时任务时,会在该目录中添加以自己名称命名的文件,并将定时任务保存在其中。

3、可能出现的提示

可能出现的提示
    no crontab for oldboy02               : 没有任何定时任务
    crontab: installing new crontab       : 新增了一个定时任务
    Do you want to retry the same edit?	  : 编辑的定时任务可能会出现错误

4、定时任务的日志

定时任务的日志
    当定时任务出现错误的时候,需要排查错误,就需要到定时任务日志文件中去查询错误的原因
    /var/log/cron   : 可以查看到执行那些定时任务
    /var/log/message: 记录系统操作的日志,(例如:用户登录)

定时任务书写规范

1、为定时任务规则加必要的注释,如:谁在什么时间添加了什么
2、所有的定时任务尽量都以脚本的形式执行
3、在执行的Shell脚本前加上/bin/sh,防止脚本没有权限执行不了
4、定时任务重命令或脚本的结尾加>/dev/null 2>&1。不加会产生垃圾
5、在指定用户下执行相关定时任务
6、生产任务计划中不要随便打印输出
7、定时任务执行的脚本要存放到规范路径下
8、配置定时任务要规范操作过程,减少出错,如:大象放冰箱
9、定时任务脚本中程序命令及路径尽量用全路径
10、时间变量%号要用反斜线转义(只有定时命令时才需要)
11、若脚本中调用了系统环境变量,要重新定义
12、出错或无法执行,就检查/var/log/cron日志

定时任务的各种格式

案例1:要求每分钟执行一次
	* * * * *
	
案例2:要求每天的凌晨3点执行一次
	0 3 * * *

案例3:要求每天上午7,9,12点各执行一次
	0 7,9,12 * * *

案例4:要求每个季度执行一次
	0 1,4,7,10 * * *

案例5:要求在每天上午的7点每隔2分钟执行一次(0分钟的时候不执行)
	*/2 7 * * *

案例6:要求每个月的1号的星期一执行一次
	0 0 1 * 1

案例7:要求每天的8 - 11点每隔5分钟执行一次
	*/5 8,9,10,11 * * *
	*/5 8-11 * * *

案例8:要求每天的21点到凌晨3点,每个5分钟执行一次
	*/5 21-3 * * *
	*/5 21-23,0-3 * * *

案例9:要求每天上午7点开始,每隔两分钟执行一次
	*/2 7 * * *

案例10:要求每天上午7点开始到23点结束,每隔两小时的两分钟执行一次
	*/2 7-23/2 * * *

案例11:要求工作日(1,5)的7点和下午两点执行一次
	0 7,14 * * 1-5
	0 7,14 * * 1,2,3,4,5
	
实例12:每小时的第3和第15分钟执行
	3,15 * * * *
	
实例13:在上午8点到11点的第3和第15分钟执行
	3,15 8-11 * * *
	3,15 8,9,10,11 * * *

实例14:每隔两天的上午8点到11点的第3和第15分钟执行
	3,15 8-11 */2 * *

实例15:每个星期一的上午8点到11点的第3和第15分钟执行
	3,15 8-11 * * 1

测试题:

测试1:每分钟追加一次oldboy字符串到/tmp/oldboy.log里
	解答:大象放冰箱分三步方法
	1)、命令行执行成功
        [root@localhost ~]# echo "oldboy" >> /etc/oldboy.log
        [root@localhost ~]# cat /etc/oldboy.log 
        
    2)、配置定时任务crontab -e 编辑配置
    	[root@localhost ~]# crontab -e
    	* * * * * echo "oldboy" >> /etc/oldboy.log
    
    3)、检查
    	[root@localhost ~]# crontab -l