mdserver-web服务监控:进程状态和自动重启

mdserver-web服务监控:进程状态和自动重启

【免费下载链接】mdserver-web Simple Linux Panel 【免费下载链接】mdserver-web 项目地址: https://gitcode.com/GitHub_Trending/md/mdserver-web

概述

mdserver-web作为一款专业的Linux面板服务,内置了完善的进程监控和自动重启机制。本文将深入解析其服务监控架构,重点介绍进程状态检测、异常处理以及自动重启的实现原理,帮助管理员更好地理解和使用这一关键功能。

监控架构设计

mdserver-web采用多线程监控架构,通过独立的守护线程对系统各项服务进行实时监控:

mermaid

核心监控功能详解

1. 系统级监控(System Monitor)

系统监控线程负责全局服务状态检测,通过配置文件控制监控开关:

def systemTask():
    from utils.system import monitor
    try:
        while True:
            monitor_status = thisdb.getOption('monitor_status',type='monitor',default='open')
            if monitor_status == 'open':
                monitor.instance().run()
            time.sleep(5)
    except Exception as ex:
        print('systemTask:',mw.getTracebackInfo())
        time.sleep(30)
        systemTask()

监控特性:

  • 5秒检测间隔,确保实时性
  • 异常自动恢复机制
  • 配置驱动,支持动态启停

2. PHP服务监控与自动修复

PHP监控是mdserver-web的核心功能之一,专门处理PHP-FPM进程异常:

PHP版本支持矩阵
PHP版本状态检测自动重启服务管理方式
5.2-5.6init.d
7.0-7.4systemd
8.0-8.4systemd
检测算法流程

mermaid

关键代码实现
def checkPHPVersion(version):
    # 检查指定PHP版本状态
    try:
        sock = mw.getFpmAddress(version)
        data = mw.requestFcgiPHP(sock, '/phpfpm_status_' + version + '?json')
        result = str(data, encoding='utf-8')
    except Exception as e:
        result = 'Bad Gateway'
    
    # 异常状态判断
    error_patterns = [
        'Bad Gateway',
        'HTTP Error 404: Not Found', 
        'Connection refused'
    ]
    
    for pattern in error_patterns:
        if pattern in result:
            return False
    return True

3. OpenResty服务监控

OpenResty作为Web服务器核心,mdserver-web提供两种监控模式:

立即重启模式(高优先级)
def openrestyRestartAtOnce():
    restart_nginx_tip = mw.getPanelDir()+'/data/restart_nginx.pl'
    while True:
        if os.path.exists(restart_nginx_tip):
            os.remove(restart_nginx_tip)
            mw.opWeb('reload')
        time.sleep(1)

特性:

  • 1秒检测间隔,快速响应
  • 文件信号触发机制
  • 安全的重载操作(reload)
自动重启模式(日常维护)
def openrestyAutoRestart():
    try:
        while True:
            odir = mw.getServerDir() + '/openresty'
            if not os.path.exists(odir):
                time.sleep(86400)
                continue
            mw.opWeb('reload')
            time.sleep(86400)  # 24小时
    except Exception as e:
        mw.writeLog('OpenResty检测', '自动修复异常:'+str(e))
        time.sleep(86400)

应用场景:

  • SSL证书自动续期后生效
  • 日常配置维护
  • 预防内存泄漏

4. 进程状态检测机制

mdserver-web使用多种技术进行进程状态检测:

进程检测方法对比
检测方法适用场景优点缺点
端口检测网络服务真实业务可用性受防火墙影响
进程PID检查本地服务简单直接不能反映业务状态
Unix Socket检测PHP-FPM高性能需要特定协议
HTTP接口检测Web服务完整业务链依赖网络
进程管理命令封装
# 获取进程PID
cmd = "ps aux | grep 'panel_task.py' | grep -v grep |awk '{print $2}'"
task_pid = mw.execShell(cmd)

# 递归终止进程树
def removeTaskRecursion(pid):
    cmd = "ps -ef|grep %s | grep -v grep |sed -n '2,1p' | awk '{print $2}'" % pid
    sub_pid = mw.execShell(cmd)
    if sub_pid[0].strip() == '':
        return 'ok'
    if sub_pid[0].strip() == pid :
        return 'ok'
    removeTaskRecursion(sub_pid[0].strip())
    mw.execShell('kill -9 ' + sub_pid[0].strip())
    return sub_pid[0].strip()

5. 任务队列监控系统

mdserver-web内置任务队列管理系统,确保后台任务可靠执行:

任务状态机

mermaid

任务执行流程
def runPanelTask():
    # 获取任务锁
    lock_file = mw.getTriggerTaskLockFile()
    
    try:
        if os.path.exists(lock_file):
            # 处理异常任务
            bash_list = thisdb.getTaskList(status=-1)
            for task in bash_list:
                thisdb.setTaskStatus(task['id'], 0)

            # 执行待处理任务
            run_list = thisdb.getTaskList(status=0)
            for run_task in run_list:
                start = int(time.time())
                thisdb.setTaskData(run_task['id'], start=start)
                thisdb.setTaskStatus(run_task['id'], -1)

                # 任务类型分发
                if run_task['type'] == 'download':
                    argv = run_task['cmd'].split('|mw|')
                    downloadFile(argv[0], argv[1])
                elif run_task['type'] == 'execshell':
                    execShell(run_task['cmd'])

                end = int(time.time())
                thisdb.setTaskData(run_task['id'], end=end)
                thisdb.setTaskStatus(run_task['id'], 1)

            # 清理锁文件
            if thisdb.getTaskUnexecutedCount() < 1:
                os.remove(lock_file)
    except Exception as e:
        print('runPanelTask:',mw.getTracebackInfo())

监控配置与管理

监控开关配置

通过数据库选项控制监控功能:

-- 查看监控状态
SELECT * FROM options WHERE type='monitor';

-- 开启系统监控
UPDATE options SET value='open' WHERE type='monitor' AND name='monitor_status';

-- 关闭系统监控  
UPDATE options SET value='close' WHERE type='monitor' AND name='monitor_status';

监控日志分析

mdserver-web提供完整的监控日志体系:

日志类型存储位置内容描述
PHP守护日志系统日志PHP进程异常与修复记录
OpenResty日志服务日志Web服务重启记录
任务执行日志panelTask.pl后台任务执行详情
系统监控日志系统日志全局监控事件

最佳实践建议

1. 监控策略优化

# 自定义监控间隔
def optimizedMonitor():
    check_intervals = {
        'php': 10,      # PHP检测间隔10秒
        'nginx': 5,     # Nginx检测间隔5秒  
        'system': 30,   # 系统检测间隔30秒
        'plugin': 60    # 插件检测间隔60秒
    }
    
    # 根据服务重要性设置不同检测频率

2. 异常处理策略

# 分级重试机制
def smartRetry(service_name, max_retries=3):
    retry_delays = [1, 5, 30]  # 分级延迟
    
    for attempt in range(max_retries):
        try:
            if checkService(service_name):
                return True
            restartService(service_name)
            time.sleep(retry_delays[attempt])
        except Exception as e:
            logError(f"{service_name} 第{attempt+1}次重试失败: {str(e)}")
    
    return False

3. 资源监控集成

# 集成系统资源监控
def resourceAwareMonitor():
    # 获取系统负载
    load_avg = os.getloadavg()[0]
    mem_info = psutil.virtual_memory()
    
    # 根据系统负载调整监控策略
    if load_avg > 5.0 or mem_info.percent > 90:
        # 高负载时减少监控频率
        time.sleep(30)
    else:
        # 正常负载标准监控
        time.sleep(5)

故障排查指南

常见问题及解决方案

问题现象可能原因解决方案
PHP频繁重启配置错误检查php.ini配置
监控线程阻塞资源不足调整监控间隔
任务队列积压任务超时优化任务执行时间
服务启动失败端口冲突检查端口占用情况

诊断命令参考

# 查看监控线程状态
ps aux | grep panel_task.py

# 检查PHP-FPM状态
systemctl status php74  # 根据版本调整

# 查看监控日志
tail -f /www/server/mdserver-web/logs/panel.log

# 检查任务队列
mysql -e "SELECT * FROM mw_tasks WHERE status != 1" 

总结

mdserver-web的服务监控系统体现了以下设计理念:

  1. 分层监控:从进程级到服务级的多层次监控
  2. 智能恢复:基于异常类型的自适应恢复策略
  3. 资源感知:根据系统负载动态调整监控强度
  4. 日志驱动:完整的监控日志体系便于问题排查
  5. 配置灵活:支持动态启用/禁用各项监控功能

通过深入了解mdserver-web的监控机制,管理员可以更好地维护系统稳定性,及时发现问题并快速响应,确保Web服务的持续可用性。

提示:定期检查监控日志,根据业务特点调整监控参数,可以达到最佳监控效果。

【免费下载链接】mdserver-web Simple Linux Panel 【免费下载链接】mdserver-web 项目地址: https://gitcode.com/GitHub_Trending/md/mdserver-web

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值