Files
nanocode/weixin-nanobot-bridge/scripts/install-service.sh
T
Ubuntu 32b43f85bd a
2026-07-03 16:58:28 +08:00

91 lines
2.2 KiB
Bash
Executable File

#!/bin/bash
# 安装 WeChat-Nanobot Bridge 为系统服务
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
SERVICE_NAME="weixin-nanobot-bridge"
SERVICE_FILE="/etc/systemd/system/${SERVICE_NAME}.service"
echo "🔧 安装 WeChat-Nanobot Bridge 系统服务"
echo " 项目目录: $PROJECT_DIR"
echo ""
# 检查权限
if [ "$EUID" -ne 0 ]; then
echo "❌ 请使用 sudo 运行此脚本"
echo " sudo ./scripts/install-service.sh"
exit 1
fi
# 创建服务文件
echo "📝 创建服务文件..."
cat > "$SERVICE_FILE" << EOF
[Unit]
Description=WeChat-Nanobot Bridge Service
Documentation=https://github.com/nanocode/nanocode
After=network.target
Wants=network.target
[Service]
Type=simple
User=ubuntu
Group=ubuntu
WorkingDirectory=$PROJECT_DIR
Environment="HOME=/home/ubuntu"
Environment="PATH=/usr/local/bin:/usr/bin:/bin:/home/ubuntu/.local/bin"
Environment="PYTHONPATH=$PROJECT_DIR/src"
Environment="NANOBOT_BRIDGE_HOST=0.0.0.0"
Environment="NANOBOT_BRIDGE_PORT=5000"
# 启动命令
ExecStart=/usr/bin/python3 $PROJECT_DIR/src/server.py
# 重启策略
Restart=always
RestartSec=10
StartLimitInterval=60s
StartLimitBurst=3
# 日志
StandardOutput=append:$PROJECT_DIR/logs/service.log
StandardError=append:$PROJECT_DIR/logs/service-error.log
# 安全设置
NoNewPrivileges=false
ProtectSystem=false
ProtectHome=false
[Install]
WantedBy=multi-user.target
EOF
echo "✅ 服务文件已创建: $SERVICE_FILE"
# 重载 systemd
echo "🔄 重载 systemd..."
systemctl daemon-reload
# 启用开机自启
echo "🚀 启用开机自启..."
systemctl enable "$SERVICE_NAME"
echo ""
echo "🎉 安装完成!"
echo ""
echo "管理命令:"
echo " 启动服务: sudo systemctl start $SERVICE_NAME"
echo " 停止服务: sudo systemctl stop $SERVICE_NAME"
echo " 重启服务: sudo systemctl restart $SERVICE_NAME"
echo " 查看状态: sudo systemctl status $SERVICE_NAME"
echo " 查看日志: sudo journalctl -u $SERVICE_NAME -f"
echo ""
echo "是否现在启动服务? (y/n)"
read -r response
if [[ "$response" =~ ^[Yy]$ ]]; then
systemctl start "$SERVICE_NAME"
sleep 2
systemctl status "$SERVICE_NAME" --no-pager
fi