Linux服务状态查看完全指南:从systemctl到传统init命令
Linux服务状态查看完全指南:从systemctl到传统init命令
在Linux系统管理中,查看服务状态是日常运维的重要技能。不同的Linux发行版使用不同的初始化系统,因此需要掌握多种查看方法。本文将详细介绍在各种环境下查看service状态的完整方案。
1. systemd系统(现代主流发行版)
现代Linux发行版如Ubuntu 16.04+、CentOS 7+、Debian 8+等都采用systemd作为初始化系统,systemctl
是管理服务的标准命令。
查看单个服务状态
# 基本语法
systemctl status <service-name>
# 实际示例
systemctl status nginx
systemctl status apache2
systemctl status mysql
systemctl status docker
查看所有服务状态
# 查看所有已加载的服务状态
systemctl list-units --type=service
# 查看所有服务文件状态(包括未激活的)
systemctl list-unit-files --type=service
# 只查看运行中的服务
systemctl list-units --type=service --state=running
# 只查看失败的服务
systemctl list-units --type=service --state=failed
状态输出解读
$ systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2023-10-10 14:30:00 CST; 1 day ago
Docs: man:nginx(8)
Process: 1234 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Main PID: 1235 (nginx)
Tasks: 2 (limit: 4915)
Memory: 10.5M
CGroup: /system.slice/nginx.service
├─1235 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
└─1236 nginx: worker process
关键字段说明:
- Loaded: 服务是否加载,是否启用开机自启
- Active: 服务当前状态(active/running, inactive/dead, failed等)
- Main PID: 服务主进程ID
- Memory: 内存使用情况
2. SysV init系统(较老系统)
对于Ubuntu 14.04及以前、CentOS 6及以前等使用传统SysV init的系统,需要使用不同的命令。
查看服务状态
# 查看单个服务状态
service <service-name> status
# 查看所有服务状态
service --status-all
# 使用init.d脚本
/etc/init.d/<service-name> status
示例
service httpd status
/etc/init.d/mysqld status
service --status-all | grep mysql
3. 使用进程查看命令辅助验证
除了专用的服务管理命令,还可以通过进程和端口信息来验证服务状态。
查看服务相关进程
# 查看特定服务的进程
ps aux | grep nginx
ps -ef | grep mysql
# 查看进程树
pstree -p | grep nginx
# 查看端口占用(网络服务)
netstat -tulpn | grep :80
ss -tulpn | grep :80
查看服务日志
# 使用journalctl查看systemd服务日志
journalctl -u nginx.service
journalctl -u nginx.service --since "2023-10-10 14:00:00"
journalctl -u nginx.service -f # 实时跟踪
# 查看传统日志文件
tail -f /var/log/nginx/error.log
tail -f /var/log/mysql/error.log
4. Upstart系统
部分系统使用Upstart作为初始化系统(如Ubuntu 14.10及以前),需要使用initctl
命令。
# 查看单个服务状态
initctl status <service-name>
# 查看所有服务状态
initctl list
5. 如何确定系统类型
不确定你的系统使用哪种初始化系统?可以通过以下方法检查:
# 检查systemd
systemctl --version
# 检查Upstart
initctl --version
# 检查进程1(init进程)
ps -p 1 -o comm=
6. 实用的状态检查脚本
快速检查多个服务
#!/bin/bash
# 检查多个关键服务的状态
services=("nginx" "mysql" "redis" "docker")
for service in "${services[@]}"; do
echo "=== $service status ==="
if systemctl is-active $service >/dev/null 2>&1; then
echo "✓ $service is running"
else
echo "✗ $service is not running"
fi
done
详细的服务状态报告
#!/bin/bash
# 生成详细的服务状态报告
echo "=== 系统服务状态报告 ==="
echo "生成时间: $(date)"
echo ""
# 运行中的服务
echo "运行中的服务:"
systemctl list-units --type=service --state=running --no-pager
echo ""
echo "失败的服务:"
systemctl list-units --type=service --state=failed --no-pager
echo ""
echo "关键服务状态:"
critical_services=("nginx" "mysql" "ssh" "firewalld")
for service in "${critical_services[@]}"; do
status=$(systemctl is-active $service 2>/dev/null || echo "not-found")
enabled=$(systemctl is-enabled $service 2>/dev/null || echo "unknown")
printf "%-15s %-10s %-10s\n" "$service" "$status" "$enabled"
done
7. 状态判断快捷命令
# 检查服务是否活跃
systemctl is-active nginx
# 检查服务是否启用开机自启
systemctl is-enabled nginx
# 检查服务是否失败
systemctl is-failed nginx
# 一次性查看活跃和启用状态
systemctl show nginx -p ActiveState -p SubState -p LoadState
总结
推荐使用systemctl命令(现代系统):
# 基本状态查看
systemctl status servicename
# 快速状态判断
systemctl is-active servicename
systemctl is-enabled servicename
# 详细日志查看
journalctl -u servicename
掌握这些命令和服务状态查看技巧,将大大提高你的Linux系统管理效率。根据你的系统类型和具体需求,选择最合适的方法来监控和管理服务状态。