91 lines
2.2 KiB
Bash
Executable File
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
|