增加自动升级脚本系统服务配置脚本
This commit is contained in:
1 parent
81691fb864
commit
709a09b4d4
2 files changed
+184
No files matched your search
@@ -0,0 +1,69 @@
|
||||
# Pika Agent 升级脚本
|
||||
|
||||
## RestartSec 配置升级脚本
|
||||
|
||||
### 背景
|
||||
|
||||
旧版本的 pika-agent 使用 `kardianos/service` 库的默认模板,导致 systemd 服务的 `RestartSec` 被硬编码为 120 秒。新版本通过自定义模板将其改为 5 秒,以实现更快的故障恢复。
|
||||
|
||||
### 一键升级
|
||||
|
||||
**推荐方式:直接通过 curl 执行**
|
||||
|
||||
```bash
|
||||
curl -fsSL https://raw.githubusercontent.com/dushixiang/pika/main/scripts/update-restartsec.sh | sudo bash
|
||||
```
|
||||
|
||||
### 脚本功能
|
||||
|
||||
1. ✓ 检查是否以 root 权限运行
|
||||
2. ✓ 检查服务文件是否存在
|
||||
3. ✓ 检查当前 RestartSec 配置(如果已经是 5 秒则跳过)
|
||||
4. ✓ 修改 RestartSec 为 5 秒
|
||||
5. ✓ 重新加载 systemd 配置
|
||||
6. ✓ 自动重启服务并验证状态
|
||||
|
||||
### 验证结果
|
||||
|
||||
```bash
|
||||
# 查看服务文件中的 RestartSec 配置
|
||||
cat /etc/systemd/system/pika-agent.service | grep RestartSec
|
||||
|
||||
# 应该显示: RestartSec=5
|
||||
```
|
||||
|
||||
### 注意事项
|
||||
|
||||
- **脚本会自动重启服务以应用新配置**
|
||||
- 重启过程通常只需 2-3 秒,对监控数据影响极小
|
||||
- 脚本会自动检测服务重启后的状态,确保服务正常运行
|
||||
|
||||
### 批量升级多台服务器
|
||||
|
||||
如果有多台服务器需要升级:
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
|
||||
SERVERS=(
|
||||
"192.168.1.10"
|
||||
"192.168.1.11"
|
||||
"192.168.1.12"
|
||||
)
|
||||
|
||||
for server in "${SERVERS[@]}"; do
|
||||
echo "================================"
|
||||
echo "升级服务器: $server"
|
||||
echo "================================"
|
||||
ssh root@$server 'curl -fsSL https://raw.githubusercontent.com/dushixiang/pika/main/scripts/update-restartsec.sh | bash'
|
||||
echo ""
|
||||
done
|
||||
|
||||
echo "所有服务器升级完成!"
|
||||
```
|
||||
|
||||
### 新版本安装
|
||||
|
||||
对于新安装的服务(使用新版本代码重新编译),无需运行此脚本,因为新版本会自动使用正确的配置。
|
||||
|
||||
**此脚本仅用于升级已安装的旧版本服务。**
|
||||
Executable
+115
@@ -0,0 +1,115 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Pika Agent RestartSec 升级脚本
|
||||
# 用途: 将 systemd 服务的 RestartSec 从 120 改为 5
|
||||
# 使用: curl -fsSL https://raw.githubusercontent.com/dushixiang/pika/main/scripts/update-restartsec.sh | sudo bash
|
||||
|
||||
set -e
|
||||
|
||||
# 颜色输出
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
SERVICE_NAME="pika-agent"
|
||||
SERVICE_FILE="/etc/systemd/system/${SERVICE_NAME}.service"
|
||||
|
||||
echo "================================================"
|
||||
echo "Pika Agent RestartSec 升级脚本"
|
||||
echo "================================================"
|
||||
echo ""
|
||||
|
||||
# 检查是否以 root 权限运行
|
||||
if [ "$EUID" -ne 0 ]; then
|
||||
echo -e "${RED}错误: 请使用 root 权限运行此脚本${NC}"
|
||||
echo "使用方法: curl -fsSL https://raw.githubusercontent.com/dushixiang/pika/main/scripts/update-restartsec.sh | sudo bash"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查服务文件是否存在
|
||||
if [ ! -f "$SERVICE_FILE" ]; then
|
||||
echo -e "${RED}错误: 服务文件不存在: $SERVICE_FILE${NC}"
|
||||
echo "请先安装 pika-agent 服务"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "${YELLOW}[1/3] 检查当前配置...${NC}"
|
||||
# 检查当前的 RestartSec 值
|
||||
CURRENT_RESTART_SEC=$(grep -oP '^\s*RestartSec=\K\d+' "$SERVICE_FILE" || echo "")
|
||||
|
||||
if [ -z "$CURRENT_RESTART_SEC" ]; then
|
||||
echo -e "${YELLOW}警告: 未找到 RestartSec 配置${NC}"
|
||||
else
|
||||
echo "当前 RestartSec = $CURRENT_RESTART_SEC 秒"
|
||||
fi
|
||||
|
||||
# 如果已经是 5,则无需修改
|
||||
if [ "$CURRENT_RESTART_SEC" = "5" ]; then
|
||||
echo -e "${GREEN}✓ RestartSec 已经是 5 秒,无需修改${NC}"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -e "${YELLOW}[2/3] 修改 RestartSec 配置...${NC}"
|
||||
# 修改 RestartSec 为 5
|
||||
if grep -q "^\s*RestartSec=" "$SERVICE_FILE"; then
|
||||
# 如果存在 RestartSec,则替换
|
||||
sed -i 's/^\(\s*\)RestartSec=.*/\1RestartSec=5/' "$SERVICE_FILE"
|
||||
echo "已将 RestartSec 修改为 5 秒"
|
||||
else
|
||||
# 如果不存在 RestartSec,则在 Restart=always 后添加
|
||||
sed -i '/^\s*Restart=always/a RestartSec=5' "$SERVICE_FILE"
|
||||
echo "已添加 RestartSec=5 配置"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -e "${YELLOW}[3/4] 重新加载 systemd 配置...${NC}"
|
||||
# 重新加载 systemd 配置
|
||||
systemctl daemon-reload
|
||||
echo "systemd 配置已重新加载"
|
||||
|
||||
# 验证修改后的值
|
||||
NEW_RESTART_SEC=$(grep -oP '^\s*RestartSec=\K\d+' "$SERVICE_FILE")
|
||||
|
||||
if [ "$NEW_RESTART_SEC" != "5" ]; then
|
||||
echo ""
|
||||
echo "================================================"
|
||||
echo -e "${RED}✗ 配置修改失败${NC}"
|
||||
echo "================================================"
|
||||
echo ""
|
||||
echo "当前 RestartSec = $NEW_RESTART_SEC 秒"
|
||||
echo "请检查服务文件: cat $SERVICE_FILE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -e "${YELLOW}[4/4] 重启服务以应用新配置...${NC}"
|
||||
# 重启服务
|
||||
if systemctl restart $SERVICE_NAME; then
|
||||
echo "服务已重启"
|
||||
|
||||
# 等待一下,确保服务启动
|
||||
sleep 2
|
||||
|
||||
# 检查服务状态
|
||||
if systemctl is-active --quiet $SERVICE_NAME; then
|
||||
echo -e "${GREEN}✓ 服务运行正常${NC}"
|
||||
else
|
||||
echo -e "${YELLOW}警告: 服务可能未正常启动,请检查状态${NC}"
|
||||
echo "执行: systemctl status $SERVICE_NAME"
|
||||
fi
|
||||
else
|
||||
echo -e "${RED}✗ 服务重启失败${NC}"
|
||||
echo "请手动检查: systemctl status $SERVICE_NAME"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "================================================"
|
||||
echo -e "${GREEN}✓ 升级完成!${NC}"
|
||||
echo "================================================"
|
||||
echo ""
|
||||
echo "修改后 RestartSec = $NEW_RESTART_SEC 秒"
|
||||
echo "服务已自动重启并应用新配置"
|
||||
echo ""
|
||||
Reference in new issue
Block a user