第一章 定时任务介绍
1.什么是定时任务
定时执行命令或脚本
2.为什么需要定时任务
每天备份数据
定时同步时间
每天巡检
whereis
1.这个命令可以用来查找二进制(命令)、源文件、man文件。与which不同的是这条命令可以是通过文件索引数据库而非PATH来查找的,所以查找的面比which要广。
2.可以看到,whereis不仅找到了 crontab 可执行文件的位置,还找到了其 man
帮助文件,可见其搜索范围比较广,不局限于PATH。
whereis 查询crontab 命令详情
[root@centos7-100 ~]# whereis crontab
crontab: /usr/bin/crontab /etc/crontab /usr/share/man/man1/crontab.1.gz /usr/share/man/man5/crontab.5.gz
[root@centos7-100 ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
which查询crontab 详情
[root@centos7-100 ~]# which crontab
/usr/bin/crontab
第二章 定时任务实践说明
1.定时任务配置文件说明
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
2.定时任务语法详解
5星口诀:分 时 日 月 周
* * * * * user command
分钟 小时 天 月份 星期 执行用户 执行命令
间隔符号:
* 星号表示任意,最小单位,每分/每小时/每周/每月
- 表示一个时间段范围,例如8-10点
, 表示分割,表示每当,如果日期举例:2,4,6表示每月的2号4号6号
/ 表示每隔多久,如果是小时,*/2 表示每隔2小时
第三章 定时任务时间表达练习
* * * * * 表示每分钟都执行
00 00 * * * 每天0点执行
30 01 * * * 每天凌晨1点30分执行
00 * * * * 每小时整执行
* */2 * * * 每隔2小时执行
*/30 * * * * 每隔30分钟执行
00 01 15 * * 每个月的15号01点执行
00 05 01-14 * * 每个月1-14号凌晨5点执行
*/10 06-08 */5 * * 每隔5天的上午6点到8点之间每隔10分钟执行一次
00 08-15/2 * * *白天08-15点之间,每隔2小时执行
00 23 * * 01-03 周一到周三每天晚上11点执行
第四章 定时任务配置管理
1.命令格式
crontab [options]
2.常用参数
-e #编辑定时任务
-l #查看定时任务
-r #删除定时任务
-u #指定其他用户的定时任务
3.小试身手
第一步:编辑定时任务,操作命令和vim一样的
crontab -e
第二步:查看定时任务
crontab -l
第五章 定时任务实战练习
练习1:每分钟输出时间到/tmp/time.log 日志里
* * * * * date >>/tmp/time.log
练习2:每周日执行一次删除/var/log/nginx/ 目录下7天以前日志的任务
[root@centos7-100 tmp]# crontab -l
* * * * * date >>/tmp/time.log
00 00 * * 7 find /var/log/nginx -type f -mtime +7 |xargs rm -rf
练习3:备份任务
需求如下:
1.每天凌晨1点备份一次/var/log目录到/backup目录下
00 01 * * * mkdir /backup -p && tar zcvf /backup/log.tar.gz /var/log
2.备份格式为2021-11-07_hostname_log.tar.gz
00 01 * * *
mkdir /backup -p
tar zcvf /backup/$(date +%F)_$(hostname)_log.tar.gz /var/log
合并写成一条
00 01 * * * mkdir /backup -p && tar zcvf /backup/$(date +%F)_$(hostname)_log.tar.gz /var/log
3.将执行的结果保存到日志里/tmp/backup.log
00 01 * * * mkdir /backup -p && tar zcvf /backup/$(date +%F)_$(hostname)_log.tar.gz /var/log
4.要求备份文件只保留3天,多余删掉
find /backup/ -type f -name "*_log.tar.gz" -mtime +3 |xargs rm -rf
5.将命令写进脚本里并赋予执行权限
1.创建backup.sh 文件
touch /opt/backup.sh
vim /opt/backup.sh
2.创建备份目录
mkdir /backup -p
3.备份日志
tar zcvf /backup/$(date +%F)_$(hostname)_log.tar.gz /var/log
4.删除多余的压缩包
find /backup/ -type f -name "*_log.tar.gz" -mtime +3 |xargs rm -rf
5.增加文件执行权限
chmod +x /opt/backup.sh #chmod +x 和chmod a+x 效果一样
6.编写定时任务
00 01 * * * /bin/bash /opt/backup.sh >> /tmp/backup.log 2>&1
第六章 定时任务调试
1.工作中定时任务的坑
坑1:没打日志,不知道定时任务有没有执行
正确姿势:
定时任务执行过程最好输出到日志里,这样有助于排查问题,如果不需要输出,可以定向到/dev/null。
定时任务不需要输出到屏幕上。
坑2:命令行可以执行,但是放进定时任务里执行不成功
正确姿势:
定时任务可识别的PATH变量有限,最佳实践是将要执行的命令放进脚本里,然后定时任务执行这个脚本。
还有一点需要注意的就是,定时任务要执行的命令,最好使用绝对路径,这样就不会因为PATH变量不全导致执行不了命令了。
坑3:时间久了,不知道这条定时任务是干嘛的了
定时任务一定要加注释,不然容易被人打
2.调试定时任务的思路
1.先把定时任务的命令在命令终端执行测试好,确定没问题之后再写进定时任务里
2.调试的时候可以将执行过程详细的输出到日志里,方便排查问题
3.定时任务执行的命令使用绝对路径
4.如果是执行的脚本,最好加上可执行权限
5.调试的阶段可以缩短定时任务执行的间隔,方便测试出结果
6.最后别忘了给定时任务添加注释。方便自己,也方便他人阅读