crontab实现不了每隔多少天备份 需要每天定时跑脚本,自己判断是否执行备份
#!/bin/bash
day=$(date +%d); #当前天数
scripttime=$(date "+%Y-%m-%d %H:%M:%S"); #脚本运行时间记录
start=$(date +%s) #开始执行的时间戳
#判断当前天数是哪天 如果符合备份天数 就执行备份
if [[ $day = 03 ]] || [[ $day = 06 ]] || [[ $day = 09 ]] || [[ $day = 12 ]] || [[ $day = 15 ]] || [[ $day = 18 ]] || [[ $day = 21 ]] || [[ $day = 24 ]] || [[ $day = 27 ]] || [[ $day = 30 ]];
then
#两种删除方式
# 1.简单粗暴直接删除带_文件,不利于多次备份数据保留
cd /data/logs/nginx/xjj/ && rm -rf access_* && rm -rf error_* #删除之前备份文件
# 2.通过find命令 找出匹配到的access_* 然后多少分钟前的数据并且执行-exec删掉 更多方式百度find命令详情
find /data/logs/nginx/xjj/ -mmin +1 -name access_* -exec rm -rf {} \;
date=$(date +%Y-%m-%d) #备份时间文件名
cp /data/logs/nginx/xjj/access.log /data/logs/nginx/xjj/access_$date.log #执行备份 变量后面拼接方式 /data/logs/nginx/xjj/access_$date".log"
true > /data/logs/nginx/xjj/access.log #备份完清空日志文件内容
cp /data/logs/nginx/xjj/error.log /data/logs/nginx/xjj/error_$date.log
true > /data/logs/nginx/xjj/error.log
end=$(date +%s) #结束执行的时间戳
difference=$(( end - start ))
echo $scripttime' exectime:'$difference>>/data/logs/nginx/xjj/run.log #输出脚本备份执行时间 和 脚本执行时间日志 >> 是追加
fi