服务器服务状态检查需查进程、查端口、查响应、存日志、发通知;基础检查用pgrep/systemctl验进程、ss验端口、curl/mysqladmin验响应;批量检查通过免密SSH循环执行;进阶需组合验证、敏感信息脱敏、状态缓存防抖、区分服务类型。

服务器服务状态检查不是写个“ping一下”就完事,关键在于可复用、可告警、可追溯。核心思路是:查进程、查端口、查响应、存日志、发通知。
一、基础服务状态检查(单机本地)
适用于日常巡检或脚本初版开发,聚焦系统级和服务级双验证:
-
查进程是否存在:用
pgrep -f "服务关键词"或systemctl is-active --quiet 服务名,返回0表示运行中;避免只用ps aux | grep,易误判(grep自身进程被匹配) -
查端口是否监听:用
ss -tuln | grep :端口号(比netstat更快),确认服务确实在绑定端口,而非仅进程存活 -
查服务是否可响应:对Web服务用
curl -s -o /dev/null -w "%{http_code}" http://localhost:8080/health;对数据库用mysqladmin -u root -p'xxx' ping &>/dev/null;HTTP码200或输出"mysqld is alive"才算真正可用
二、批量远程检查(多台服务器)
运维常需同时检查几十台机器,推荐免密SSH+循环执行:
宝塔面板11.3.0是一款针对Linux服务器设计的可视化管理工具,通过重构核心模块实现资源占用显著降低,尤其适合低配置服务器环境。它将复杂的命令行操作转化为直观的图形界面,帮助开发者快速完成网站部署、环境配置及日常运维工作,无需专业技术背景即可高效管理服务器。
- 准备主机清单文件
servers.txt,每行格式:192.168.1.10 nginx(IP + 服务关键词) - 用
while read ip service; do ssh -o ConnectTimeout=5 $ip "pgrep -f '$service' &>/dev/null && echo OK || echo DOWN"; done - 加超时和错误抑制(
-o ConnectTimeout=5),避免某台卡住阻塞整个脚本;结果重定向到日志,便于后续分析
三、自动告警与记录(生产必备)
光查不报等于没查。一次异常必须触发动作:
- 检查结果写入带日期的文件,如
/var/log/service-check/$(date +%F).log - 发现DOWN项立即发邮件:
echo "nginx down on 192.168.1.10" | mail -s "SERVICE ALERT" admin@company.com - 结合crontab定时执行,例如每3分钟检查一次关键服务:
*/3 * * * * /opt/scripts/check.sh >> /var/log/check.log 2>&1
四、进阶建议(避免踩坑)
实际落地时容易忽略但影响稳定性:
- 不要依赖单一指标:进程存在 ≠ 服务可用(可能假死),端口监听 ≠ 响应正常(可能502),务必组合验证
- 敏感信息脱敏:密码、token等不能硬编码在脚本里,改用环境变量或配置文件(chmod 600)
- 状态缓存防抖:连续3次失败再告警,避免网络抖动引发误报
- 区分服务类型:Java应用查JVM端口+HTTP健康接口;Redis查
redis-cli ping;Nginx查worker进程+80端口+curl首页

















