day19-Linux 定时任务

第一章 定时任务介绍

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.最后别忘了给定时任务添加注释。方便自己,也方便他人阅读

posted @ 2021-10-20 19:37  zhaocheng690  阅读(146)  评论(0编辑  收藏  举报