1+ #! /bin/bash
2+
3+ # ==============================================================================
4+ # Telegram QA Bot (telembed) 自动更新脚本
5+ #
6+ # 该脚本会自动下载最新版本的机器人程序和服务文件,并重启服务。
7+ # 它不会触碰您的数据和配置文件。
8+ # 运行方式:
9+ # curl -sSL https://raw.githubusercontent.com/ooopus/telembed/refs/heads/main/update.sh | sudo bash
10+ # 或者直接: sudo ./update.sh
11+ # ==============================================================================
12+
13+ set -e # 如果任何命令失败,则立即退出
14+
15+ # --- 配置变量 (与 install.sh 保持一致) ---
16+ SERVICE_NAME=" telembed"
17+ SERVICE_USER=" telembed"
18+ SERVICE_GROUP=" telembed"
19+ WORK_DIR=" /opt/telembed"
20+ CONFIG_DIR_BASE=" /opt/telembed"
21+ LOG_DIR=" /var/log/${SERVICE_NAME} "
22+
23+ # 二进制文件下载链接
24+ BINARY_URL=" https://github.com/ooopus/telembed/releases/latest/download/telembed-x86_64-unknown-linux-gnu"
25+ # systemd 服务文件下载链接
26+ SERVICE_URL=" https://raw.githubusercontent.com/ooopus/telembed/refs/heads/main/telembed.service"
27+
28+
29+ # --- 脚本开始 ---
30+ echo " 🚀 开始更新 Telegram QA Bot (${SERVICE_NAME} )..."
31+
32+ # 1. 检查是否以 root 权限运行
33+ if [ " $( id -u) " -ne 0 ]; then
34+ echo " ❌ 请以 root 权限运行此脚本 (例如: sudo ./update.sh)" >&2
35+ exit 1
36+ fi
37+
38+ echo " ✅ Root 权限检查通过。"
39+
40+ # 2. 停止当前正在运行的服务
41+ echo " 🔄 正在停止 ${SERVICE_NAME} 服务..."
42+ if systemctl is-active --quiet " ${SERVICE_NAME} .service" ; then
43+ systemctl stop " ${SERVICE_NAME} .service"
44+ echo " - 服务已停止。"
45+ else
46+ echo " - 服务未在运行,无需停止。"
47+ fi
48+
49+ # 3. 下载并替换二进制文件
50+ echo " 🔽 正在从 GitHub 下载最新的二进制文件..."
51+ # 使用 mktemp 创建一个临时文件来安全地下载
52+ TMP_BINARY=$( mktemp)
53+ curl -L --fail " ${BINARY_URL} " -o " ${TMP_BINARY} "
54+ echo " - 下载完成,正在替换旧文件..."
55+ mv " ${TMP_BINARY} " " /usr/local/bin/${SERVICE_NAME} "
56+ chmod +x " /usr/local/bin/${SERVICE_NAME} "
57+ echo " - 二进制文件已更新到 /usr/local/bin/${SERVICE_NAME} "
58+
59+ # 4. 下载并替换 systemd 服务文件
60+ echo " ⚙️ 正在下载最新的 systemd 服务文件..."
61+ # 这很重要,因为服务依赖项或参数可能会改变
62+ curl -L --fail " ${SERVICE_URL} " -o " /etc/systemd/system/${SERVICE_NAME} .service"
63+ echo " - 服务文件已更新到 /etc/systemd/system/${SERVICE_NAME} .service"
64+
65+ # 5. 确保文件和目录权限仍然正确
66+ # 这可以防止因某些意外操作导致权限错误
67+ echo " 🔐 正在验证并设置权限..."
68+ chown -R " ${SERVICE_USER} :${SERVICE_GROUP} " " ${WORK_DIR} "
69+ chown -R " ${SERVICE_USER} :${SERVICE_GROUP} " " ${CONFIG_DIR_BASE} "
70+ chown -R " ${SERVICE_USER} :${SERVICE_GROUP} " " ${LOG_DIR} "
71+ chmod -R 750 " ${WORK_DIR} "
72+ chmod -R 750 " ${CONFIG_DIR_BASE} "
73+ chmod -R 750 " ${LOG_DIR} "
74+ echo " - 权限验证完成。"
75+
76+ # 6. 重载 systemd 并重启服务
77+ echo " 🚀 正在重启服务以应用更新..."
78+ systemctl daemon-reload
79+ systemctl restart " ${SERVICE_NAME} .service"
80+
81+ echo " "
82+ echo " ✅ 更新完成!"
83+ echo " "
84+ echo " 机器人服务已使用最新版本重新启动。"
85+ echo " 您的配置文件和知识库数据 (${WORK_DIR} /data/QA.json) 都已保留。"
86+ echo " "
87+ echo " 您可以使用以下命令检查服务状态:"
88+ echo " sudo systemctl status ${SERVICE_NAME} "
89+ echo " "
90+ echo " 查看实时日志:"
91+ echo " sudo journalctl -u ${SERVICE_NAME} -f"
92+ echo " "
93+ echo " 💡 建议: 访问项目的 GitHub Releases 页面,查看更新日志以了解新功能或重大变更。"
0 commit comments