189 lines
5.0 KiB
Bash
189 lines
5.0 KiB
Bash
#!/bin/bash
|
||
|
||
# VPS Hub 监控程序 - 安装脚本
|
||
# 该脚本会创建systemd服务,持续化运行monitor.py
|
||
|
||
# 颜色定义
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
NC='\033[0m' # No Color
|
||
|
||
# 获取当前脚本所在目录的绝对路径
|
||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
|
||
# 定义服务名称
|
||
SERVICE_NAME="idc_monitor"
|
||
SERVICE_FILE="/etc/systemd/system/${SERVICE_NAME}.service"
|
||
|
||
echo "=========================================="
|
||
echo " VPS Hub 监控程序 - 安装向导"
|
||
echo "=========================================="
|
||
echo ""
|
||
|
||
# 检查是否以root权限运行
|
||
if [ "$EUID" -ne 0 ]; then
|
||
echo -e "${RED}错误: 请以root权限运行此脚本 (sudo ./install.sh)${NC}"
|
||
exit 1
|
||
fi
|
||
|
||
# 检查Python是否已安装
|
||
if ! command -v python3 &> /dev/null; then
|
||
if command -v python &> /dev/null; then
|
||
PYTHON_CMD="python"
|
||
else
|
||
echo -e "${RED}错误: 未找到Python,请先安装Python 3${NC}"
|
||
exit 1
|
||
fi
|
||
else
|
||
PYTHON_CMD="python3"
|
||
fi
|
||
|
||
echo -e "${GREEN}✅${NC} 检测到Python: ${PYTHON_CMD}"
|
||
|
||
# 检查pip是否存在
|
||
if command -v pip3 &> /dev/null; then
|
||
PIP_CMD="pip3"
|
||
elif command -v pip &> /dev/null; then
|
||
PIP_CMD="pip"
|
||
else
|
||
echo -e "${YELLOW}警告: 未检测到pip${NC}"
|
||
read -p "是否现在安装pip?(Y/n): " -n 1 -r
|
||
echo
|
||
if [[ $REPLY =~ ^[Nn]$ ]]; then
|
||
echo -e "${RED}错误: pip不可用,无法继续${NC}"
|
||
exit 1
|
||
else
|
||
# 安装pip
|
||
if command -v apt-get &> /dev/null; then
|
||
apt-get update && apt-get install -y python3-pip
|
||
elif command -v yum &> /dev/null; then
|
||
yum install -y python3-pip
|
||
elif command -v dnf &> /dev/null; then
|
||
dnf install -y python3-pip
|
||
else
|
||
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
|
||
${PYTHON_CMD} get-pip.py
|
||
rm -f get-pip.py
|
||
fi
|
||
|
||
if command -v pip3 &> /dev/null; then
|
||
PIP_CMD="pip3"
|
||
elif command -v pip &> /dev/null; then
|
||
PIP_CMD="pip"
|
||
else
|
||
echo -e "${RED}错误: pip安装失败${NC}"
|
||
exit 1
|
||
fi
|
||
fi
|
||
fi
|
||
|
||
echo -e "${GREEN}✅${NC} 检测到pip: ${PIP_CMD}"
|
||
|
||
echo ""
|
||
echo "注意: VPS配置请通过网页 config_add.php 进行管理"
|
||
|
||
# 安装Python依赖
|
||
if [ -f "${SCRIPT_DIR}/requirements.txt" ]; then
|
||
echo ""
|
||
echo "正在安装Python依赖包..."
|
||
cd ${SCRIPT_DIR}
|
||
if ${PIP_CMD} install -r requirements.txt; then
|
||
echo -e "${GREEN}✅${NC} Python依赖包安装成功"
|
||
else
|
||
echo -e "${RED}❌${NC} Python依赖包安装失败"
|
||
exit 1
|
||
fi
|
||
else
|
||
echo -e "${YELLOW}警告: requirements.txt 文件不存在${NC}"
|
||
exit 1
|
||
fi
|
||
|
||
# 检查monitor.py是否存在
|
||
if [ ! -f "${SCRIPT_DIR}/monitor.py" ]; then
|
||
echo -e "${RED}错误: monitor.py 文件不存在${NC}"
|
||
exit 1
|
||
fi
|
||
|
||
# 创建日志目录和数据库目录
|
||
LOG_DIR="${SCRIPT_DIR}/logs"
|
||
DB_DIR="${SCRIPT_DIR}/db"
|
||
mkdir -p ${LOG_DIR} ${DB_DIR}
|
||
chmod 755 ${LOG_DIR} ${DB_DIR}
|
||
|
||
echo ""
|
||
echo "正在创建systemd服务..."
|
||
|
||
# 创建systemd服务文件
|
||
cat > ${SERVICE_FILE} << EOF
|
||
[Unit]
|
||
Description=VPS Hub Monitor Service
|
||
After=network.target
|
||
Wants=network-online.target
|
||
|
||
[Service]
|
||
Type=simple
|
||
User=root
|
||
WorkingDirectory=${SCRIPT_DIR}
|
||
ExecStart=${PYTHON_CMD} ${SCRIPT_DIR}/monitor.py
|
||
Restart=always
|
||
RestartSec=10
|
||
StandardOutput=journal
|
||
StandardError=journal
|
||
SyslogIdentifier=${SERVICE_NAME}
|
||
|
||
# 资源限制
|
||
LimitNOFILE=65536
|
||
|
||
# 安全设置
|
||
NoNewPrivileges=true
|
||
ProtectSystem=strict
|
||
ReadWritePaths=${SCRIPT_DIR}
|
||
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
EOF
|
||
|
||
# 重新加载systemd配置
|
||
systemctl daemon-reload
|
||
|
||
# 启用服务(开机自启)
|
||
systemctl enable ${SERVICE_NAME}
|
||
|
||
# 启动服务
|
||
echo ""
|
||
echo "正在启动服务..."
|
||
systemctl start ${SERVICE_NAME}
|
||
|
||
# 检查服务状态
|
||
sleep 2
|
||
if systemctl is-active --quiet ${SERVICE_NAME}; then
|
||
echo -e "${GREEN}✅${NC} ${SERVICE_NAME} 服务已成功安装并启动"
|
||
echo -e "${GREEN}✅${NC} 服务状态: 运行中"
|
||
else
|
||
echo -e "${RED}❌${NC} ${SERVICE_NAME} 服务启动失败"
|
||
echo ""
|
||
echo "请检查日志:"
|
||
echo " journalctl -u ${SERVICE_NAME} -n 50 --no-pager"
|
||
exit 1
|
||
fi
|
||
|
||
echo ""
|
||
echo "=========================================="
|
||
echo -e "${GREEN}安装完成!${NC}"
|
||
echo "=========================================="
|
||
echo ""
|
||
echo "常用命令:"
|
||
echo -e " ${YELLOW}查看服务状态:${NC} systemctl status ${SERVICE_NAME}"
|
||
echo -e " ${YELLOW}查看实时日志:${NC} journalctl -u ${SERVICE_NAME} -f"
|
||
echo -e " ${YELLOW}查看正常日志:${NC} tail -f ${LOG_DIR}/monitor.log"
|
||
echo -e " ${YELLOW}查看异常日志:${NC} tail -f ${LOG_DIR}/error.log"
|
||
echo -e " ${YELLOW}停止服务:${NC} systemctl stop ${SERVICE_NAME}"
|
||
echo -e " ${YELLOW}重启服务:${NC} systemctl restart ${SERVICE_NAME}"
|
||
echo -e " ${YELLOW}卸载服务:${NC} cd ${SCRIPT_DIR} && ./uninstall.sh"
|
||
echo ""
|
||
echo "配置文件位置: 通过网页 config_add.php 管理"
|
||
echo "日志文件位置: ${LOG_DIR}"
|
||
echo "数据库文件位置: ${DB_DIR}"
|
||
echo ""
|