日志cos备份脚本
#日志备份并上传
#!/bin/bash
# 定义变量
source_dir="/home/ap/ccps/logs" # 源日志目录(包含日期目录)
backup_dir="/home/backupfile/app/app_logs/pkg" # 备份目录
log_file="/home/backupfile/app/app_logs/upload_logs.log" # 日志文件
mkdir -p "$backup_dir" # 确保备份目录存在
# 设置环境变量(避免crontab路径问题)
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# 获取14天前的日期(两种格式)
target_date_with_underscore=$(date -d "-14 days" +"%Y_%m_%d") # 2025_02_21
target_date_pure=$(date -d "-14 days" +"%Y%m%d") # 20250221
# 获取服务器IP(用于COS路径)
server_ip=$(ip a | awk '/inet 10\.79\./{print $2}' | cut -d/ -f1 | head -n1)
# 日志记录函数
log_info() {
echo "[INFO] $(date '+%Y-%m-%d %H:%M:%S') $1" | tee -a "$log_file"
}
log_error() {
echo "[ERROR] $(date '+%Y-%m-%d %H:%M:%S') $1" | tee -a "$log_file"
exit 1
}
# 1. 迁移整个日期目录到备份路径
move_date_dir() {
log_info "开始迁移目录: $source_dir/$target_date_with_underscore"
# 检查源目录是否存在
if [ ! -d "$source_dir/$target_date_with_underscore" ]; then
log_info "未找到目录: $source_dir/$target_date_with_underscore"
exit 0
fi
# 迁移目录(保留目录结构)
if ! mv "$source_dir/$target_date_with_underscore" "$backup_dir/"; then
log_error "迁移目录失败: $source_dir/$target_date_with_underscore"
fi
log_info "迁移完成: $backup_dir/$target_date_with_underscore"
}
# 2. 压缩目录(格式: ccps_YYYYMMDD.tar.gz)
compress_date_dir() {
log_info "开始压缩目录: $backup_dir/$target_date_with_underscore"
cd "$backup_dir" || log_error "无法进入备份目录"
# 检查目录是否存在
if [ ! -d "$target_date_with_underscore" ]; then
log_error "目录不存在: $target_date_with_underscore"
fi
# 压缩为纯数字日期格式
tar_file="ccps_${target_date_pure}.tar.gz"
if ! tar -czf "$tar_file" "$target_date_with_underscore"; then
log_error "压缩失败: $target_date_with_underscore"
fi
log_info "压缩完成: $tar_file (大小: $(du -h $tar_file | cut -f1))"
}
# 3. 上传到COS(路径: IP/YYYYMMDD/)
upload_to_cos() {
log_info "开始上传到COS: $tar_file"
cos_path="$server_ip/$target_date_pure/"
if ! coscmd upload "$tar_file" "$cos_path"; then
log_error "上传失败: $cos_path"
fi
log_info "上传成功: cos://$cos_path$tar_file"
}
# 4. 清理本地文件
cleanup() {
log_info "开始清理本地文件"
# 删除压缩包
rm -f "$backup_dir/$tar_file" || log_error "删除压缩包失败"
# 删除已迁移的日期目录
rm -rf "$backup_dir/$target_date_with_underscore" || log_error "删除目录失败"
log_info "清理完成"
}
# 主流程
main() {
log_info "===== 任务开始 ====="
log_info "处理日期: $target_date_with_underscore → $target_date_pure"
log_info "服务器IP: $server_ip"
move_date_dir # 迁移目录
compress_date_dir # 压缩目录
upload_to_cos # 上传COS
cleanup # 清理本地
log_info "===== 任务完成 ====="
}
# 执行主函数
main
作者:做个超努力的小奚&kervin24
个人博客站:http://www.kervin24.top
CSDN博客:https://blog.csdn.net/qq_52914969?type=blog




