1 .定时任务
1.1 概述
- 定时任务:用于执行在 Linux 中的重复性工作.eg: 命令 (同步系统时间), 脚本 (备份,系统巡检)
- 定时任务:类似于闹钟
1.2 服务使用流程
服务使用流程 | 说明 |
---|---|
部署 | 安装这个服务或软件 |
配置 | 如何使用这个服务通过配置文件,通过命令。 |
优化或注意事项 | 安全…… |
排障 | A 通过错误提示解决。B 学会看日志。AB 高级:让服务输出错误提示或者输出更加详细的错误提示(通过重定向) |
其他 | 1 做好监控 2 做好备份 3 做好日志收集 4 统一认证 |
1.3 部署定时任务
-
定时任务软件包名字: cronie, 服务名字 (进程) crond
-q,查询;-a所有已安装 ;-l 列出软件包安装的所有文件 rpm -qa cronie rpm -ql cronie
目录结构 | 说明 |
---|---|
① /var/spool/cron/ | 用户的定时任务的配置文件的目录 |
② crontab | 定时任务管理的命令 |
③ /var/log/cron | 定时任务日志 |
了解下就行的配置文件 | |
/etc/crontab | 不推荐使用这个,系统定时任务的配置文件。 |
/etc/cron.hourly/ | 系统定时任务,每小时运行。 |
/etc/cron.daily/ | 系统定时任务,每天运行。 |
/etc/cron.weekly/ | 系统定时任务,每周运行。 |
/etc/cron.monthly/ | 系统定时任务,每个月运行。 |
- 检查是否运行
1) 配置的命令
crontab 用于对定时任务的规则进行增删改查.
crontab 选项 | 说明 | |
---|---|---|
crontab -e | edit 编辑当前用户的定时任务 | vi /var/spool/cron/root #root 当前用户的名字 |
crontab -l | list 查看当前用户的定时任务 | cat /var/spool/cron/root #root 当前用户的名字 |
[root@oldboy-85-vip-king-v2 oldboy]# crontab -l
no crontab for root用户未设置定时任务[root@oldboy-85-vip-king-v2 oldboy]# crontab -e
no crontab for root - using an empty one用户未设置定时任务,给新建空的.
crontab: installing new crontab更新了定时任务的配置.
2)定时任务书写格式-时间
* * * * *
分 时 日 月 周#每天早上 8:30 分 去学校 (go to school)
30 08 * * * go to school#晚上 12 点上床睡觉 (go to bed/sleep) * 00 * * * go to bed #每天的半夜 12 点 00 - 59 每分钟运行。
00 00 * * * go to bed #每天运行备注:表示整点的时候,未说明分钟的时候,我们要指定的分钟,一般是 00。
关于分钟位置上是否写 * :涉及到小时,天,周几的时候,分钟位置上记得写个数 (00)# 每周六半夜 12 点去 玩游戏
* 00 * * 06 game 每周的半夜 12 点 00-59, 每分钟1次
0-5900 00 * * 06 game 每周六的半夜 12 点玩游戏
3) 定时任务时间部分的特殊符号
时间部分特殊符号 | 说明 | 案例 |
---|---|---|
/ | 每隔 xxx 时间 | */2 * * * * 每 2 分钟00 */2 * * * 每 2 个小时 |
- | 表示范围 | 00 08-22 * * * 08-22 点的每个小时运行 00 08-22/3 * * * 08-22 点的每 3 小时运行 |
, | 表示独立时间 (没规律) | 00 08,11,14,17,20 * * * |
* | 每,全部 / 所有 (没说具体时间) | * 在分钟的位置上表示 00-59, 每分钟的意思 * 在小时位置上表 00-23, 每小时的意思. |
#每天的上午 7 点到晚上 11 点 每二个小时运行 CMD 命令
00 07-23/2 * * * CMD
07 09 11 13 15 17 19 21 23#定时任务每天 23 点到第 2 天的 7 点运行.
00 23,00-07 * * *
1.5 定时任务案例
- 同步时间
- 进行备份
- 日常循环操作
- 巡检 + 发送邮件
- 时间 + 命令格式
1) 案例01 每两分钟同步下系统的时间
- 使用了什么命令?ntpdate ntp1.aliyun.com
- 书写定时任务配置文件:
#1. 同步时间 by lidao996 at 20221111
*/2 * * * * /sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1>/dev/null:将命令的 标准输出 重定向到 /dev/null(一个 “黑洞” 设备,丢弃输出内容),避免任务执行时产生多余的输出信息。
2>&1:将命令的 标准错误 也重定向到标准输出的目标(即 /dev/null),确保错误信息也被丢弃,让定时任务后台运行更 “安静”。
- 调试 (测试,检查)
- 修改下时间
1 date改下时间即可
- 日志:这个定时任务是否运行
定时任务日志只能提示是否运行了,但是无法告诉我们是否运行成功.
tail -f /var/log/cronNov 11 11:12:01 oldboy-aliyun-servers CROND[16436]: (root) CMD (/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1)
Aug 8 10:46:20 oldboy-aliyun-servers CROND[16449]: (root) CMD (/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1)
- 查看定时任务的结果 (时间是否修改,压缩包是否生成)
查看结果,时间是否同步.
2)案例 02:每天定时备份 /etc/ 到 /backup/ 下面
备份时间:业务低谷期.比如凌晨 1 点备份
☑ 命令: tar 命令
☑ 脚本:命令大礼包 .sh 结尾 .bash 结尾
☑ 定时任务配置:(每分钟运行)
☑ 调试完成改为要求的时间
- 命令:
mkdir -p /backup/
tar zcf /backup/etc-`date +%F_%w`.tar.gz /etc/
- 脚本
#专用脚本目录:
mkdir -p /server/scripts/#书写脚本
cat backup-etc.sh
tar zcf /backup/etc-date +%F_%w.tar.gz /etc/#执行脚本
sh backup-etc.sh
- 定时任务 - 时间每分钟或每 2 分钟 (调试)
#2. 定时备份 /etc/ 目录 by lidao996 at 时间
* * * * * /bin/sh /server/scripts/backup-etc.sh >/dev/null 2>&1
- 检查日志与结果
#持续监控目录下文件的详细列表变化。
watch ls -l
- 定时任务 - 调试完成后改为指定的时间运行
#2. 定时备份 /etc/ 目录 by lidao996 at xxxx
#00 01 * * * /bin/sh /server/scripts/backup-etc.sh >/dev/null 2>&1
3) 案例03: 脚本与变量
变量命名规则:
1, 不能以数字开头
2, 如果要用特殊符号,最好使用_
3, 变量名字能够体现出变量作用.
- 使用:
1 #赋值 修改变量内容(创建)
2 kui="欲练此功必先自宫,如不自宫也能成功"
3
4 #取值
5 echo $kui
6 欲练此功必先自宫,如不自宫也能成功
- 变量应用
#写入固定的内容
dir=/server/scripts/
file=backup-etc.shecho $dir $file
/server/scripts/ backup-etc.shecho $dir$file
/server/scripts/backup-etc.sh#写入命令的结果(一般是命令的结果)
time=`date +%F_%w`
echo $time
2025-10-02_4#变量只能赋值一次,显示同个时间
echo $time
2025-10-02_4
- 变量与命令(命令中如何使用变量)
创建以时间命名的文件 oldboy - 时间.txt
time=date +%F_%wtouch oldboy-$time.txt
- 在脚本中使用变量
[root@oldboy-aliyun-servers scripts]# cat /server/scripts/backup-etc-var.sh
#!/bin/bash##定义变量
time=`date +%F_%w_%H`##引用变量-备份
tar zcf /backup/etc-$time.tar.gz /etc/#用于查找 /backup/ 目录下超过 30 天的 .tar.gz 格式备份文件并删除,以清理旧备份。
find /backup -type f -name "*.tar.gz" -mtime +30 |xargs rm -f