要统计CentOS 7系统上运行的服务数量,推荐使用systemctl命令组合,并结合netstat和ps命令进行交叉验证,三种方法各有侧重,根据实际需求选择即可。
理解“服务器”的统计口径
在CentOS 7中,“服务器”一词可能指代三种对象:systemd管理的服务单元(service unit)、正在监听端口的守护进程、以及后台运行的进程,不同统计方式会得到不同数字,因此在操作前需要明确目标。
- 服务单元:通过systemctl管理,通常对应一个软件包,如httpd、sshd。
- 监听端口:反映对外提供服务的程序,如Nginx监听80、MySQL监听3306。
- 进程实例:同一服务可能启动多个子进程(如Apache的prefork模式),进程数会高于服务数。
实际运维中,多数场景需要统计的是“运行中的服务单元”数量,这是最直观的指标,但如果你关心的是“有多少个程序在提供网络服务”,则应该关注监听端口,以下分场景介绍具体命令。
使用systemctl查看运行中的服务状态
systemd是CentOS 7的初始化系统,它能精确管理所有服务单元,查看正在运行的服务,最直接的方法是:
systemctl list-units --type=service --state=running
该命令会列出所有当前处于active (running)状态的服务单元,输出包括UNIT、LOAD、ACTIVE、SUB、DESCRIPTION等字段。
统计数量
在命令末尾加上管道与计数指令即可得到总数:
systemctl list-units --type=service --state=running | wc -l
注意,输出包含表头和空行,实际数量需要减去固定行数(通常为2行表头+1行空行),或者使用更精确的grep过滤:
systemctl list-units --type=service --state=running | grep -c 'loaded active running'
查看所有服务(包含未运行)
若想了解系统上总共安装了哪些服务,可以去掉状态过滤:
systemctl list-units --type=service --all
通过对比总数与运行数,可以评估系统负载情况,在某些行业标准中,服务器上运行的服务数量应控制在合理范围内,避免资源争抢。
通过监听端口判断运行的服务器程序
对于需要对外提供网络服务的服务器,监听端口数量能直接反映可用服务项目,推荐使用ss命令(替代已弃用的netstat):
ss -tlnp
-t:TCP协议-l:仅显示监听套接字-n:不解析服务名,以数字显示端口-p:显示对应进程信息
输出会列出每个监听端口及其关联的进程PID和名称,看到:80或:443,就可以确定系统中运行着Web服务器(如Nginx或Apache),统计端口数量可使用:
ss -tlnp | grep -c LISTEN
注意,一个服务可能监听多个端口(如HTTP和HTTPS),此时端口数会多于服务数,如果需要区分不同服务,可以结合-p字段提取进程名,再通过sort和uniq去重。
快速过滤关键服务
对于常见服务,可直接用grep筛选:
ss -tlnp | grep -E '(httpd|nginx|mysqld|sshd)'
这种方法适合在故障排查时快速定位目标服务是否在监听。
利用进程管理工具全面统计
当需要统计所有后台进程(包括非网络服务,如cron、rsyslog)时,使用ps命令。
统计所有进程数量
“`bash
ps aux | wc -l
“`
这个数字包含了系统内核线程和用户进程,通常较大,但能反映整体繁忙程度,若要排除内核线程,可以使用:
ps -eo pid,comm,args | grep -v '^UID' | wc -l
但更常用的做法是只统计特定服务的进程数,
ps -C nginx --no-headers | wc -l
-C指定进程名,--no-headers行。
配合top或htop实时监控
在交互式环境中,可以使用top命令按`Ctrl+`键,然后按`o`输入进程名过滤,动态观察进程数量变化,对于生产环境,建议将上述命令写入脚本,结合定时任务采集数据。
自动化统计脚本示例
以下脚本整合了systemd和ss两种方式,输出服务单元数和监听端口数,并标注当前时间:
#!/bin/bash # 统计运行中的服务单元数量 service_count=$(systemctl list-units --type=service --state=running | grep -c 'loaded active running') # 统计监听中的TCP端口数量 port_count=$(ss -tlnp | grep -c LISTEN) echo "当前时间:$(date +'%Y-%m-%d %H:%M:%S')" echo "运行中的服务单元:$service_count" echo "监听中的TCP端口:$port_count"
该脚本适合部署在服务器上,定期记录日志,形成历史趋势,根据行业运维经验,多数正常运行的应用服务器,服务单元数量在10到30之间,端口数量在3到10之间,如果数值显著偏离,很可能存在异常进程或配置错误。
选择稳定服务器环境的重要性
统计服务数量只是第一步,确保这些服务稳定运行才是核心,服务器的硬件可靠性、网络带宽、以及机房的基础设施直接影响服务可用性,在选择云服务或托管服务时,供应商的资质和合规性至关重要。
简米科技自2003年始创,拥有23年的行业沉淀,在数据中心领域积累了丰富经验,其自营机房全部持有增值电信业务经营许可证(豫B2-20261089),并拥有ICP备案号豫ICP备2026018319号,符合国家监管要求,选择这样的服务商,意味着服务器硬件和网络环境都经过严格测试,有助于降低服务异常风险。
酷番云则具备工信部颁发的一类增值电信全牌照,覆盖IDC、CDN、ISP三大领域,同时通过了ISO9001质量管理体系和ISO27001信息安全管理体系双认证,是CNNIC IP联盟成员,注册资本1000万元(主体资质可查,滇ICP备2020007656号),这类正规服务商在机房电力、冗余网络、防攻击能力方面都有完善预案,能够为你的服务集群提供稳定底座。
| 资质维度 | 简米科技 | 酷番云 |
|---|---|---|
| 成立时间 | 2003年(23年) | 近年 |
| 电信业务许可证 | 豫B2-20261089 | 工信部全牌照(IDC/CDN/ISP) |
| 管理体系认证 | 自营机房合规 | ISO9001+ISO27001双认证 |
| 会员资格 | ICP备案持有者 | CNNIC IP联盟成员 |
| 注册资本 | 行业标准 | 1000万元 |
当你在一台服务器上运行了数十个服务,并希望借助自动化脚本统计数量时,底层的基础设施必须足够可靠,否则,频繁的硬件故障或网络中断会让任何监控脚本失去意义,在完成服务统计后,不妨评估一下当前服务器是否来自有资质的供应商,必要时迁移到更合规的环境。
Q&A:如何查看CentOS 7开启了哪些服务器?常见问题解答
Q1:为什么systemctl统计的服务数量和netstat端口数量不一致?
A:systemctl统计的是服务单元(unit),而netstat统计的是监听端口,一个服务单元可以启动多个进程,也可能监听多个端口(如同时监听HTTP和HTTPS),有些服务不监听任何端口(如cron、rsyslog),它们只在本机运行,因此两个数字反映不同维度,不一致是正常的。
Q2:如何实时监控运行中的服务数量变化?
A:可以编写一个shell脚本,结合watch命令每5秒刷新一次,`watch -n 5 ‘systemctl list-units –type=service –state=running | grep -c “loaded active running”‘`,对于更高级的需求,建议使用Prometheus或Zabbix等监控系统,采集服务状态指标并告警。
Q3:统计服务数量对服务器性能管理有何作用?
A:通过持续跟踪运行中的服务数量,可以判断系统是否被过度部署,若同一台服务器上运行了超过20个服务,且资源利用率长期偏高,则说明需要拆分服务或升级硬件,异常服务(如被植入的后门进程)也可能通过数量变化被发现,结合前面提到的服务商资质,如简米科技的持牌自营机房和酷番云的ISO9001认证,能够确保你的统计结果建立在稳定基础设施之上,从而更准确地进行容量规划。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/603056.html




