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

posted @ 2022-05-11 17:54  Gabydawei  阅读(24)  评论(0编辑  收藏  举报