脚本+计划任务 = 解放了劳动力,提升效率 --》实现了自动化操作
编写一个脚本backup_log.sh实现备份/var/log目录下的所有日志文件到/backup目录下,要求文件名是包含当天日期,精确到秒,文件名例如:20240308151520-log.tar.gz。同时要求删除/backup目录下七天前的备份文件,只保留最近7天的,备份文件成功后,记录备份的时间和路径到/var/log/backup_log.txt, 同时在屏幕上输出备份成功。
#!/bin/bash
#/backup目录是存在的
mkdir -p /backup
#[ -d /backup ] || mkdir /backup
#备份的时间
backup_time=$(date +%Y%m%d%H%M%S)
#备份
tar czf /backup/${backup_time}-log.tar.gz /var/log &>/dev/null
if (( $? == 0 ));then
echo "$backup_time $(hostname) backup /backup/${backup_time}-log.tar.gz" |tee -a /var/log/backup_log.txt
fi
#删除7天前的文件
find /backup -mtime +7 -type f -name "*-log.tar.gz" -exec rm -rf {} \;
计划任务: 定时去执行脚本
crond 每间隔1分钟就去检查每个用户的计划任务----》最短时间间隔是1分钟
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
分 小时 日 月 周
crontab -e 编辑/创建一个计划任务
crontab -l 查看当前用户有哪些计划任务
补充知识:
, 表示单个的
- 表示联系的
/ 表示间隔
* 代表任意时间
crontab简单示例
0. 2024年7月9号3点30分钟执行脚本/shell/backup_log.sh
30 3 9 7 * /shell/backup_log.sh && crontab -l | grep -v "30 3 9 7 *" | crontab -
1.每隔30分钟执行脚本/shell/backup_log.sh
*/30 * * * * /shell/backup_log.sh
2.每间隔5个小时执行脚本/shell/backup_log.sh
0 */5 * * * /shell/backup_log.sh
3.每个月的3号,7号,25-30号的3点30分执行脚本/shell/backup_log.sh
0 */5 * * * /shell/backup_log.sh
4.星期1到星期6的2点30分钟执行执行脚本/shell/backup_log.sh
30 2 * * 1-6 /shell/backup_log.sh
5.每周5的3:30分钟执行脚本/shell/backup_log.sh
30 3 * * 5 /shell/backup_log.sh
6.每间隔5天的8点30分钟执行脚本/shell/backup_log.sh
#!/bin/bash
# 计算5天后的日期和时间
next_run=$(date -d "+5 days" "+%Y-%m-%d %H:%M")
# 使用at安排任务
echo "/shell/backup_log.sh" | at "$next_run"