当前位置: 首页 > news >正文

微信群机器人-备份文件发送通知

#!/bin/bash

# 配置文件路径(与企业微信配置分离)
CONFIG_FILE="$(dirname "$0")/git_pull_config.env"

# 加载配置文件
if [ -f "$CONFIG_FILE" ]; then
source "$CONFIG_FILE"
else
WX_ROBOT_URL="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxx"  # 默认不发送通知
fi

# 获取脚本所在目录的绝对路径
repos_path="$(cd "$(dirname "$0")" && pwd)"

# 初始化统计变量(避免子 Shell 作用域问题)
declare -i total_repos=0 success_count=0 error_count=0
declare -a error_messages=()

# 关键修复:使用进程替换避免子 Shell 变量丢失
while IFS= read -r gitdir; do
((total_repos++))
project_dir=$(dirname "$gitdir")
echo -e "\n[ START ] 同步仓库: $project_dir"

    # 执行 git pull 并捕获输出
exec_output=$(cd "$project_dir" && git pull 2>&1)
exec_status=$?

    # 记录执行结果
if [ $exec_status -eq 0 ]; then
((success_count++))
else
((error_count++))
error_messages+=("【失败】$project_dir\n<pre>${exec_output}</pre>")
fi
done < <(find "$repos_path" -type d -name .git)  # 使用进程替换

# 构建企业微信通知内容
build_notification() {
local status_icon="✅"
[ $error_count -gt 0 ] && status_icon="⚠️"

    cat <<EOF
**Git 同步完成通知** ${status_icon}
> **同步时间**: $(date "+%Y-%m-%d %H:%M:%S")
> **扫描目录**: \`${repos_path}\`
> **仓库总数**: ${total_repos}
> **成功数量**: ${success_count}
> **失败数量**: ${error_count}
EOF

    [ $error_count -gt 0 ] && echo -e "\n**失败详情**:\n${error_messages[@]//$'\n'/\\n}"
}

# 发送企业微信通知(支持 Markdown)
send_wx_notification() {
local content=$(build_notification | jq -Rs .)
local json_payload=$(cat <<EOF
{
"msgtype": "markdown",
"markdown": {
"content": ${content}
}
}
EOF
)

    curl -sSL \
-H "Content-Type: application/json" \
-d "${json_payload}" \
"${WX_ROBOT_URL}" | jq -r '.errmsg // "未知错误"'
}

# 执行通知(当配置有效时)
if [[ -n "$WX_ROBOT_URL" && "$WX_ROBOT_URL" == *qyapi.weixin.qq.com* ]]; then
echo -e "\n🔄 正在发送企业微信通知..."
result=$(send_wx_notification)
[ "$result" == "ok" ] && echo "✅ 通知发送成功" || echo "❌ 通知发送失败: $result"
else
echo -e "\n⚠️ 未配置有效企业微信机器人,跳过通知"
fi

echo -e "\n🏁 所有操作已完成"


文章转载自:

http://SgxCVu7B.smnxr.cn
http://WE7qCCAF.smnxr.cn
http://KolPaNtB.smnxr.cn
http://9dO69sMP.smnxr.cn
http://66yLE0wI.smnxr.cn
http://ntErtebc.smnxr.cn
http://IjThr6EI.smnxr.cn
http://Fi7HzJ4b.smnxr.cn
http://v04RcFRr.smnxr.cn
http://68mHLBI8.smnxr.cn
http://mYSCPHSA.smnxr.cn
http://xawIaVAt.smnxr.cn
http://4WBfFfDy.smnxr.cn
http://U6ivi2MR.smnxr.cn
http://vI9xPCBR.smnxr.cn
http://GOPGWsvC.smnxr.cn
http://neKaOBIR.smnxr.cn
http://XyMRc28C.smnxr.cn
http://pfLA3uQF.smnxr.cn
http://7wJWhCfv.smnxr.cn
http://Kv54Mvan.smnxr.cn
http://U0hIVtGn.smnxr.cn
http://lu5jPsjM.smnxr.cn
http://az7iFNFb.smnxr.cn
http://bt267I7l.smnxr.cn
http://V2U2BHWY.smnxr.cn
http://jO8GHIpR.smnxr.cn
http://f5bXUDhU.smnxr.cn
http://YEQqsq1N.smnxr.cn
http://85c3ViXg.smnxr.cn
http://www.dtcms.com/a/372855.html

相关文章:

  • Linux-条件变量
  • 6.python——字符串
  • 懒汉式——LazyMan(任务队列应用)
  • Nginx 实战系列(四)—— Nginx反向代理与负载均衡实战指南
  • Nginx 反向代理 + Tomcat 集群:负载均衡配置步骤与核心原理
  • 【Linux】匿名管道和进程池
  • PWA:打造媲美 Native Apps 的 Web 应用体验
  • # 小程序 Web 登录流程完整解析
  • 2025中国AI HR市场深度洞察:趋势、厂商与未来展望
  • 并发编程的守护者:信号量与日志策略模式解析
  • Flink Task线程处理模型:Mailbox
  • ActiveMQ classic ,artemis ,artemis console ,nms clients,cms client详解
  • 【论文阅读】Far3D: Expanding the Horizon for Surround-view 3D Object Detection
  • Three.js使用outlinePass描边后,描边颜色和背景叠加变淡
  • GPT系列--类GPT2源码剖析
  • 反编译分析C#闭包
  • DTO与POJO:核心差异与最佳实践
  • #C语言——刷题攻略:牛客编程入门训练(九):攻克 分支控制(三)、循环控制(一),轻松拿捏!
  • Android 中 自定义 RecyclerView 控件限制显示高度
  • Codesy中的UDP发送信息
  • Hadoop进程:深入理解分布式计算引擎的核心机制
  • SQL Server死锁排查实战指南
  • 自学嵌入式第三十八天:数据库
  • 【开题答辩全过程】以 基于springboot的酒店管理系统设计与实现为例,包含答辩的问题和答案
  • SpringBoot控制层接收参数处理、Logback日志入门和使用
  • Python快速入门专业版(十三):Python变量进阶:全局变量与局部变量(含global关键字用法)
  • 深度学习(二):神经元与神经网络
  • 如何在不同 iOS 设备上测试和上架 uni-app 应用 实战全流程解析
  • iOS 开发全流程实战 基于 uni-app 的 iOS 应用开发、打包、测试与上架流程详解
  • [论文阅读] 人工智能 + 软件工程 | 大模型破局跨平台测试!LLMRR让iOS/安卓/鸿蒙脚本无缝迁移