# 定义一个函数来执行同步并检查结果 sync_folders() { localsource=$1 local dest=$2 local description=$3 echo"[$DATE] 开始同步: $description" | tee -a $LOG_FILE # 执行rsync命令,保存退出状态 rsync -av --delete "$source""$dest" status=$? # 检查同步结果 if [ $status -eq 0 ]; then echo"[$DATE] ✓ 成功: $description 同步完成" | tee -a $LOG_FILE return 0 else echo"[$DATE] ✗ 失败: $description 同步失败(错误代码: $status)" | tee -a $LOG_FILE return 1 fi }
# 初始化计数器 success_count=0 fail_count=0
# 第一个同步任务:文档目录 sync_folders "/path/to/docs/A/""/path/to/docs/B/""文档目录同步" if [ $? -eq 0 ]; then ((success_count++)) else ((fail_count++)) fi
# 第二个同步任务:图片目录 sync_folders "/path/to/images/A/""/path/to/images/B/""图片目录同步" if [ $? -eq 0 ]; then ((success_count++)) else ((fail_count++)) fi
# 第三个同步任务:配置文件目录 sync_folders "/path/to/config/A/""/path/to/config/B/""配置文件同步" if [ $? -eq 0 ]; then ((success_count++)) else ((fail_count++)) fi
# 输出最终统计结果 echo"----------------------------------------" | tee -a $LOG_FILE echo"[$DATE] 同步任务完成统计:" | tee -a $LOG_FILE echo"成功:$success_count" | tee -a $LOG_FILE echo"失败:$fail_count" | tee -a $LOG_FILE echo"----------------------------------------" | tee -a $LOG_FILE
# 如果有任何任务失败,脚本返回非零状态 if [ $fail_count -gt 0 ]; then exit 1 fi
if ! check_container_status; then log_message "错误: 容器 ${CONTAINER_NAME} 不存在" exit 1 fi
if ! is_container_running; then log_message "启动容器 ${CONTAINER_NAME}..." docker start ${CONTAINER_NAME} sleep 5 # 等待容器完全启动 if ! is_container_running; then log_message "错误: 容器启动失败" exit 1 fi log_message "容器已成功启动" else log_message "容器已经在运行中" fi
# 2. 执行Hexo命令 log_message "开始执行Hexo命令..."
docker exec -i ${CONTAINER_NAME} /bin/sh -c "cd /hexo/blog && hexo clean && hexo g" if [ $? -eq 0 ]; then log_message "Hexo静态文件生成成功" else log_message "错误: Hexo命令执行失败" exit 1 fi
# 3. 同步文件 log_message "开始同步静态文件..."
rsync -av --delete "${SOURCE_DIR}""${DEST_DIR}" if [ $? -eq 0 ]; then log_message "文件同步成功" else log_message "错误: 文件同步失败" exit 1 fi
# 4. 停止容器 log_message "停止容器..."
docker stop ${CONTAINER_NAME} if [ $? -eq 0 ]; then log_message "容器已成功停止" else log_message "警告: 容器停止失败" # 不退出,因为主要任务已完成 fi