day10.3
day10.3
定时任务-crond
什么是crond
crond是一个服务,是定时任务的守护进程
定时任务的作用
# 系统级别的定时任务
临时文件清理
系统信息采集
日志文件切割
# 用户级别的定时任务
定时向互联网同步时间
定时备份系统配置文件
定时备份数据库的数据
定时任务的语法
[root@28technicians ~]# vim /etc/crontab
'定时任务,支持bash命令'
1 SHELL=/bin/bash '定时任务只支持直接写下一个目录中的命令(建议:定时任务中的命令使用绝对路径)'
2 PATH=/sbin:/bin:/usr/sbin:/usr/bin
'定时任务执行内容,如果有输出,或者有报错,则通过邮件发送给root'
3 MAILTO=root
4
5 # For details see man 4 crontabs
6
7 # Example of job definition:
8 # .---------------- minute (0 - 59)
9 # | .------------- hour (0 - 23)
10 # | | .---------- day of month (1 - 31)
11 # | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
12 # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
13 # | | | | |
14 # * * * * * user-name command to be executed
# 语法
写定时任务,上来就六亲不认写五颗星
* * * * *
分 时 日 月 周
'定时任务的最小单位是分钟,无法精确到秒'
定时任务的相关命令
# crontab
-l:列出当前定时任务的列表
-e:编辑定时任务 vim/var/spool/cron/root
-r:删除全部定时任务
-u:指定定时任务用户
00 02 * * * ls #每天的凌晨2点整执行
00 02 1 * * ls #每月的1日的凌晨2点整执行
00 02 14 2 * ls #每年的2月14日凌晨2点执行
00 02 * * 7 ls #每周天的凌晨2点整执行
00 02 * 6 5 ls #每年的6月周五凌晨2点执行
00 02 14 * 7 ls #每月14日恰好是每周日的凌晨2点都执行
00 02 14 2 7 ls #每年的2月14日或每年2月的周天的凌晨2点执行
*/10 02 * * * ls #每天凌晨2点,每隔10分钟执行一次
* * * * * ls #每分钟都执行
00 00 14 2 * ls #每年2月14日的凌晨执行命令
*/5 * * * * ls #每隔5分钟执行一次
00 02 * 1,5,8 * ls #每年的1月5月8月每天凌晨2点执行
00 02 1-8 * * ls #每月1号到8号凌晨2点执行
0 21 * * * ls #每天晚上21:00执行
45 4 1,10,22 * * ls #每月的1,10,22号的4:45执行
45 4 1-10 * * ls #每月的1到10号的4:45执行
3,15 8-11 */2 * * ls #每隔两天的上午8点到11点的第3和第15分钟执行
0 23-7/1 * * * ls #每天的1点到7点和23点到24点执行
15 21 * * 1-5 ls #周一到周五每天晚上21:15执行
定时任务实战
# 1.时间同步定时任务
1.需要下载时间同步命令
yum install -y ntpdate
2.先测试命令是否可以执行
[root@28technicians ~]# ntpdate timel.aliyun.com
3.编辑定时任务
[root@28technicians ~]# crontab -e
4.写入规则
* * * * * ntpdate timel.aliyun.com
5.查找该命令的绝对路径
[root@28technicians ~]# which ntpdate
/usr/sbin/ntpdate
6.完善规则中的命令路径
* * * * * /usr/sbin/ntpdate timel.aliyun.com
7.根据时间规定编写定时任务,每五分钟执行一次
*/5 * * * * /usr/sbin/ntpdate timel.aliyun.com
8.查看命令是否有输出内容,如果有则扔进黑洞
*/5 * * * * /usr/sbin/ntpdate timel.aliyun.com & >/dev/null
9.加上规范注释
# Usage: Sync Date By:zls Date:2022/05/11
*/5 * * * * /usr/sbin/ntpdate timel.aliyun.com
10.查看定时任务日志
[root@28technicians ~]# tail -f /var/log/cron
配置邮箱
将授权码写入配置文件即可
练习
每天凌晨3点做一次备份
需求:将备份命令写入一个脚本中
任务:
1.每天备份文件名要求格式:2018-02-20_hostname_etc.tar.gx
2.存放备份内容的目录要求只保留3天的数据
3.在执行计划任务时,不要输出任务信息
1.编写脚本
[root@28technicians ~]# vim back_etc.sh
2.写入内容
[root@28technicians ~]# vim back_etc.sh
1 # !/bin/bash
2 mkdir -p /baka
3 ml="baka"
4 cd / && tar zcf $ml/`date +%F`_`hostname`_etc.tar.gz etc
5 find $ml -type f ! -mtime -3|xargs rm -f
3.先执行脚本,看看有没有问题
[root@28technicians ~]# sh back_etc.sh
4.没有报错在编写定时任务
[root@28technicians ~]# crontab -e
* * * * * /bin/sh /root/back_etc.sh &>/dev/null
5.查看日志
[root@28technicians baka]# tail -f /var/log/cron
备份定时任务的内容
就是备份/var/spool/cron
[root@28technicians ~]# cp /var/spool/cron/root /bak/root_cron
定时任务调试规则
# crond调试
1) 调整任务每分钟执行的频率, 以便做后续的调试。
2) 如果使用cron运行脚本,请将脚本执行的结果写入指定日志文件, 观察日志内容是否正常。
3) 命令使用绝对路径, 防止无法找到命令导致定时任务执行产生故障。
4) 通过查看/var/log/cron日志,以便检查我们执行的结果,方便进行调试。
# crond编写思路
1.手动执行命令,然后保留执行成功的结果。
2.编写脚本
脚本需要统一路径/scripts
脚本内容复制执行成功的命令(减少每个环节出错几率)
脚本内容尽可能的优化, 使用一些变量或使用简单的判断语句
脚本执行的输出信息可以重定向至其他位置保留或写入/dev/null
3.执行脚本
使用bash命令执行, 防止脚本没有增加执行权限(/usr/bin/bash)
执行脚本成功后,复制该执行的命令,以便写入cron
4.编写计划任务
加上必要的注释信息, 人、时间、任务
设定计划任务执行的周期
粘贴执行脚本的命令(不要手敲)
5.调试计划任务
增加任务频率测试
检查环境变量问题
检查crond服务日志
Linux发邮件
# 1.安装发邮件工具mailx
[root@28technicians ~]# yum install -y mailx
# 2.配置发件人
[root@28technicians ~]# vim /etc/mail.rc
#发件人
set from=#qq邮箱
#邮件服务器
set smtp=smtp.qq.com
#发件人用户名
set smtp-auth-user=#qq邮箱
#发件人密码(QQ邮箱不可以使用密码,只能使用授权码)
set smtp-auth-password=xxx
#登录方式
set smtp-auth=login
#邮件服务器协议及端口
set smtp=smtps://smtp.qq.com:465
#忽略证书
set ssl-verify=ignore
#指定证书位置
set nss-config-dir=/root/.certs
使用定时任务发邮件
# 1.创建邮件存放目录
[root@28technicians ~]# mkdir /love
# 2.编写文件
[root@28technicians ~]# vim /love/1.txt
[root@28technicians ~]# vim /love/2.txt
[root@28technicians ~]# vim /love/3.txt
[root@28technicians ~]# vim /love/4.txt
# 3.编写发送邮件的脚本
[root@28technicians ~]# vim love.sh
1 love_dir="/love"
2 love_name=`ls -1 $love_dir/|head -1`
3 count=`ls -1 /love/|wc -l`
4
5 if [$count -gt 0];then
6 cat $love_dir/$love_name|mail -s '爱你' 3504943891@qq.com
7 rm -f $love_dir/$love_name
8 fi
~
# 4.制作定时任务
[root@28technicians ~]# crontab -e
* * * * * /bin/sh /root/love.sh &>/dev/null
# 5.查看日志
[root@28technicians baka]# tail -f /var/log/cron