#!/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 ""