1、先做免密登录
在 A 服务器 执行:
ssh-keygen -t
# 一路按回车
ssh-copy-id root@B服务器IP
测试免密:
ssh root@B服务器IP
不用输密码就是成功了。
2、在A服务器创建自动同步脚本
命名为sync_db_dameng.sh
#!/bin/bash
# 配置项(请根据实际情况修改)
SOURCE_BASE_DIR="/dm8/dmdata/DAMENG/bak/" # A服务器存放DB_DAMENG文件夹的上级目录
REMOTE_USER="root" # B服务器登录用户
REMOTE_HOST="192.168.1.100" # B服务器IP/域名
REMOTE_DIR="/dm8/bak" # B服务器接收文件夹的目录
LOG_FILE="/dm8/scp_log/db_dameng_sync.log" #日志存放位置(A服务器)
# 日志函数
log() {
echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE
}
# 第一步:检查源目录是否存在
if [ ! -d "$SOURCE_BASE_DIR" ]; then
log "错误:源目录 $SOURCE_BASE_DIR 不存在"
exit 1
fi
# 第二步:查找当天生成的DB_DAMENG开头的文件夹
# 仅匹配当天创建的文件夹(麒麟V10的find命令兼容此参数)
TARGET_DIR=$(find "$SOURCE_BASE_DIR" -maxdepth 1 -type d -name "DB_DAMENG*" -ctime 0)
if [ -z "$TARGET_DIR" ]; then
log "提示:未找到当天生成的DB_DAMENG开头文件夹"
exit 0
fi
# 第三步:执行SCP同步(递归+保留权限/时间戳)
log "开始同步文件夹:$TARGET_DIR 到 $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR"
scp -r -p "$TARGET_DIR" "${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}"
# 第四步:检查同步结果
if [ $? -eq 0 ]; then
log "成功:文件夹 $TARGET_DIR 同步完成"
else
log "失败:文件夹 $TARGET_DIR 同步失败"
exit 1
fi
exit 0
3、添加执行权限
chmod +x /dm8/sync_db_dameng.sh # 替换为脚本实际存放路径
4、测试脚本
/dm8/sync_db_dameng.sh #执行脚本
执行后查看日志cat /dm8/scp_log/db_dameng_sync.log
5、设置定时任务
crontab -e
0 3 * * * /dm8/sync_db_dameng.sh #替换为脚本实际路径
6、在B服务器设置自动删除脚本
命名为 delete_old_db_folder.sh
#!/bin/bash
REMOTE_DIR="/dm8/bak" # B服务器接收迁移文件夹的目录(与同步脚本一致)
LOG_FILE="/dm8/scp_log/delete_db_folder.log"
RETAIN_DAYS=14 # 保留最近7天的文件夹,删除7天前的
# 日志函数
log() {
echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE
}
# 检查目标目录是否存在
if [ ! -d "$REMOTE_DIR" ]; then
log "错误:目标目录 $REMOTE_DIR 不存在"
exit 1
fi
# 执行删除(仅删除DB_DAMENG开头、7天前的文件夹)
log "开始删除 $REMOTE_DIR 下7天前的DB_DAMENG开头文件夹"
find "$REMOTE_DIR" -maxdepth 1 -type d -name "DB_DAMENG*" -mtime +$RETAIN_DAYS -exec rm -rf {} \;
if [ $? -eq 0 ]; then
log "删除完成:已清理7天前的DB_DAMENG文件夹"
else
log "删除失败:部分文件夹可能正在被占用,请手动检查"
fi
exit 0
7、给删除脚本添加执行权限
chmod +x /dm8/delete_old_db_folder.sh
8、配置 crontab 定时任务
crontab -e
0 4 * * * /dm8/delete_old_db_folder.sh
文章
阅读量
获赞
