服务器服务检查报告

最近在释放某些废弃的服务器,快速查看有哪些服务。

bash 复制代码
#!/bin/bash
# 服务器重要服务检查脚本

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 重要服务列表
SYSTEM_SERVICES=("sshd" "systemd" "cron" "rsyslog" "network" "firewalld" "iptables")
WEB_SERVICES=("nginx" "apache2" "httpd" "tomcat" "php-fpm")
DB_SERVICES=("mysql" "mariadb" "postgresql" "redis" "mongodb" "elasticsearch")
MIDDLEWARE_SERVICES=("docker" "containerd" "kubelet" "rabbitmq" "kafka" "zookeeper")
MONITOR_SERVICES=("prometheus" "grafana" "node_exporter" "zabbix-agent")
OTHER_SERVICES=("ntpd" "chronyd" "supervisord" "keepalived" "haproxy")

# 计数器
TOTAL_RUNNING=0

# 检查systemd服务状态
check_service() {
    local service=$1
    local category=$2
    
    if systemctl list-unit-files | grep -q "^${service}.service"; then
        if systemctl is-active --quiet "$service" 2>/dev/null; then
            local enabled_status=""
            if systemctl is-enabled --quiet "$service" 2>/dev/null; then
                enabled_status="[开机自启]"
            else
                enabled_status="[手动启动]"
            fi
            echo -e "  ${GREEN}✓${NC} ${service} ${GREEN}(运行中)${NC} $enabled_status"
            ((TOTAL_RUNNING++))
            return 0
        else
            echo -e "  ${RED}✗${NC} ${service} ${RED}(已停止)${NC}"
            return 1
        fi
    fi
    return 2
}

# 通过进程检查服务
check_process() {
    local service=$1
    
    if pgrep -f "$service" > /dev/null 2>&1; then
        local pids=$(pgrep -f "$service" | tr '\n' ' ')
        echo -e "  ${GREEN}✓${NC} ${service} ${GREEN}(运行中)${NC} [PIDs: $pids]"
        ((TOTAL_RUNNING++))
        return 0
    fi
    return 1
}

# 检查服务类别
check_category() {
    local category_name=$1
    shift
    local services=("$@")
    local found=0
    
    echo ""
    echo -e "${BLUE}【${category_name}】${NC}"
    echo "----------------------------------------"
    
    for service in "${services[@]}"; do
        check_service "$service" "$category_name"
        local result=$?
        
        # 如果systemd没找到,尝试进程检查
        if [ $result -eq 2 ]; then
            check_process "$service"
            if [ $? -eq 0 ]; then
                found=1
            fi
        elif [ $result -eq 0 ]; then
            found=1
        fi
    done
    
    if [ $found -eq 0 ]; then
        echo "  (未发现相关服务)"
    fi
}

# 显示监听端口
show_listening_ports() {
    echo ""
    echo -e "${BLUE}【监听端口】${NC}"
    echo "----------------------------------------"
    
    if command -v ss &> /dev/null; then
        ss -tulnp 2>/dev/null | tail -n +2 | while read line; do
            local port=$(echo "$line" | awk '{print $5}' | awk -F: '{print $NF}')
            local process=$(echo "$line" | awk '{print $NF}')
            if [ -n "$port" ]; then
                printf "  端口 %-6s -> %s\n" "$port" "$process"
            fi
        done
    elif command -v netstat &> /dev/null; then
        netstat -tulnp 2>/dev/null | grep LISTEN | while read line; do
            local port=$(echo "$line" | awk '{print $4}' | awk -F: '{print $NF}')
            local process=$(echo "$line" | awk '{print $NF}')
            if [ -n "$port" ]; then
                printf "  端口 %-6s -> %s\n" "$port" "$process"
            fi
        done
    fi
}

# 主函数
main() {
    echo "========================================"
    echo "       服务器服务检查报告"
    echo "========================================"
    echo "主机名: $(hostname)"
    echo "系统: $(uname -s) $(uname -r)"
    echo "检查时间: $(date '+%Y-%m-%d %H:%M:%S')"
    echo "========================================"
    
    # 检查是否需要root权限
    if [ "$EUID" -ne 0 ]; then
        echo -e "${YELLOW}提示: 建议使用root权限运行以获取完整信息${NC}"
        echo -e "${YELLOW}      sudo $0${NC}"
        echo ""
    fi
    
    # 检查各类服务
    check_category "系统服务" "${SYSTEM_SERVICES[@]}"
    check_category "Web服务" "${WEB_SERVICES[@]}"
    check_category "数据库服务" "${DB_SERVICES[@]}"
    check_category "中间件服务" "${MIDDLEWARE_SERVICES[@]}"
    check_category "监控服务" "${MONITOR_SERVICES[@]}"
    check_category "其他服务" "${OTHER_SERVICES[@]}"
    
    # 显示监听端口
    show_listening_ports
    
    # 总结
    echo ""
    echo "========================================"
    echo -e "总计运行中的重要服务: ${GREEN}${TOTAL_RUNNING}${NC} 个"
    echo "========================================"
}

# 运行主函数
main
相关推荐
code_whiter19 分钟前
7.自动化测试常用函数
python·功能测试
小园子的小菜29 分钟前
Python协程深度解析:从原理演进到实战避坑
后端·python
砚底藏山河37 分钟前
量化实战:截面因子有效性检验(IC 分析与分层回测)
java·python·金融·maven
GitFun1 小时前
给策略加了条-8%止损线,11年只触发1次
python·股票·量化交易
马六六i2 小时前
市面上正规的IP驱动产业新场景新工具有哪些
大数据·网络·python·tcp/ip
I Am a robert girl3 小时前
稀有事件估计的迭代去对齐:从源码视角拆解重要性采样新范式
开发语言·python·机器学习·重要性采样·蒙特卡洛方法·稀有事件估计
天若有情6733 小时前
开源|Comfort Lang v1.0.1,一款主打清爽交互的新型命令式编程语言
python·开源·交互·编程语言·项目分享·repl·comfort lang
打工仔折腾 AI3 小时前
System Prompt 替代 Few-shot:用规则约束大模型输出的省钱实践
java·人工智能·python·spring·langchain·prompt·ai agent 实战
打工仔折腾 AI4 小时前
从零写一个CAD 05:以鼠标为中心的滚轮缩放,招法能复用但顺序不能反
开发语言·后端·python·性能优化·计算机外设·swift·ai agent 实战
for_ever_love__4 小时前
控制流——if、for、while 与可迭代对象
python·大模型开发·循环·控制流