定时计划任务
定时任务和周期任务
1.1 概述
- 定时任务用于执行在 linux 中的重复的工作
a. 数据备份
b. 时间同步 ntp
i. 为什么要时间一致?证书 - 日志查看
c. 设备巡检
i. 定期巡检设备的内存 cpu 硬盘网络接口使用率以及一些常规告警信息脚本自动抓取
ii. 定时计划任务,系统在指定的时间内自动周期执行上面的巡检
iii. 把巡检结果邮件的形式发送给管理员,发送给老板 - 定时任务就像一个闹钟
1.2 部署的流程
1.3 具体实现定时计划
crontab 定时计划任务的核心命令
- e 编辑计划任务
- l 查看计划任务
定时任务要用到的软件包
[root@servera ~]# rpm -qa | grep cronie
cronie-anacron-1.5.7-5.el9.x86_64
cronie-1.5.7-5.el9.x86_64
定时任务常见的目录
/var/spool/cron/ #主要存放用户的定时任务的配置
/var/log/cron #记录了定时任务的所有日志信息
系统级别的定时任务的目录结构(不建议大家去修改,系统装好就自带给系统自己用的定时任务)
/etc/cron.daily/ #系统每天运行的定时任务
/etc/cron.deny
/etc/cron.hourly/
/etc/cron.monthly/
/etc/cron.weekly/
格式
什么时间 什么事情
* * * * * 脚本或者 shell 命令
时间
分钟: 0-59
小时: 24 小时格式 0-23
日期: 1-31
月份: 1-12
周几: 0-6
#每天早上 8:30 去学校
30 08 * * * go to shcool
#每天半夜 12 点 上床睡觉
00 00 * * * go to bed
#每天半夜 12: 00-12:59 的每一分钟执行
* 00 * * * go to bed
补充:定时任务的特殊符号
* 每,全部 / 所有 * (00-59) * (0-23)
/ 每隔 xxx 的时间
#每天半夜 12 点到一点,每 2 分钟 上床
*/2 00 * * * go to bed
- 表示范围
# 每天半夜 12 点 00-10 的每一分钟 上床
00-10 00 * * * go to bed
, 表示独立的时间,没有规律
# 每天半夜 12:00 和 12:10 上床
00,10 00 * * * go to bed
#每天 7 点到晚上 23 点每个 2 小时的整点 上床
00 07-23/2 * * * go to bed
事情action
- shell 命令
- script 脚本
1.4 定时任务的案例
1.4.1 同步时间
什么时间做:每一分钟
* * * * *
问题1:如何解决配置文件中可执行命令的环境变量问题?
解决方法:找到可执行命令的绝对路径 which
/usr/bin/systemctl restart chronyd.service
crontab -e去编辑
crontab -l -u root ---- 查看
* * * * * /usr/bin/systemctl restart chronyd.service
1.4.2 文件备份
需求:每天定时备份 /etc 到 /backup 文件下面,要以时间戳为文件名字
实现步骤:
1. 什么时间:* * * * *
2. 什么事情:
/usr/bin/tar zcf /backup/etc-`date +%F_%M`.tar.gz /etc/
问题2:在执行定时任务的时候,脚本或者 shell 命令有输出(正确或者错误),就会报错,输出不是我们需要的内容,就可以用重定向 > >> /dev/null
问题3:
1.定时任务的脚本命令中,默认只能识别/bin和/usr/bin,其他命令不能识别
2.要识别其他的命令只能用脚本,在计划任务中去执行脚本
方法一:命令行方式(没有成功)
* * * * * /usr/bin/tar zcf /backup/etc-`date +%F_%M`.tar.gz /etc/ >/dev/null 2>&1 ----- 失败
方法二:写在 shell 脚本(通用的方法)
[root@servera ~]# cat back_up.sh
#!/bin/bash
tar zcf /backup/etc-`date +%F_%M`.tar.gz /etc/
[root@servera ~]# crontab -l
#02 banckup etc pre min
* * * * * /usr/bin/sh /root/back_up.sh >/dev/null 2>&1