在系统管理和运维工作中,通过命令行查看服务的启动状态、启动时间、启动命令等信息是一项基础且重要的技能,不同操作系统(如Windows、Linux、macOS)提供的命令行工具和命令语法有所不同,但核心目标一致:快速获取服务的运行状态和启动相关细节,本文将分操作系统详细介绍如何通过命令行查询服务启动信息,并辅以实例说明和对比表格,帮助读者掌握不同场景下的操作方法。

Windows系统下查看服务启动信息
Windows系统提供了多种命令行工具,包括传统的cmd命令提示符和更强大的PowerShell,两者均支持查看服务状态,但功能和输出格式有所差异。
使用cmd命令提示符
cmd是Windows内置的基础命令行工具,通过sc(Service Control)命令和net命令可快速查询服务状态。
-
sc query命令:sc query是查看服务状态的核心命令,可列出所有服务的详细信息,或针对特定服务查询。- 基本语法:
sc query [服务名] - 示例:
- 查看所有服务状态:
sc query(输出较长,建议结合findstr过滤,如sc query | findstr "STATE"仅显示状态行)。 - 查看特定服务(如“Themes”):
sc query Themes
- 查看所有服务状态:
- 输出关键字段解析:
STATE:服务当前状态,常见值有1 STOPPED(停止)、2 START_PENDING(启动中)、3 RUNNING(运行中)、4 STOP_PENDING(停止中)等。WIN32_EXIT_CODE:进程退出码,0表示正常,非0表示异常。SERVICE_EXIT_CODE:服务自身退出码,0表示正常。
- 基本语法:
-
net start命令:net start用于列出当前已启动的服务,适合快速查看运行中的服务列表。- 基本语法:
net start - 示例:
net start | findstr "Themes"(查看“Themes”服务是否已启动)。
- 基本语法:
-
tasklist命令:
通过进程列表反向关联服务,适用于已知服务名称但需确认进程是否运行的场景。- 基本语法:
tasklist /svc | findstr "服务名" - 示例:
tasklist /svc | findstr "svchost"(查看svchost进程关联的服务,svchost是Windows服务托管进程)。
- 基本语法:
使用PowerShell
PowerShell提供更丰富的对象化输出和筛选功能,适合复杂查询和自动化处理。
-
Get-Servicecmdlet:Get-Service是PowerShell中获取服务信息的核心命令,支持按名称、状态等筛选。- 基本语法:
Get-Service [[-Name] <字符串>] [-DisplayName <字符串>] [-Status <服务状态>] - 示例:
- 查看所有运行中的服务:
Get-Service | Where-Object {$_.Status -eq "Running"} - 查看特定服务(如“Spooler”)的详细信息:
Get-Service -Name "Spooler" | Format-List *(显示所有属性)
- 查看所有运行中的服务:
- 关键属性解析:
Status:服务状态(Running/Stopped/Stopping等)。StartType:启动类型(Automatic/Manual/Disabled,分别代表自动启动、手动启动、禁用)。DisplayName:服务显示名称(与内部名称Name可能不同)。StartTime:服务启动时间(需通过Get-WmiObject或Get-CimInstance获取,Get-Service默认不直接提供)。
- 基本语法:
-
Get-CimInstancecmdlet(获取更详细的服务信息):
通过WMI(Windows Management Instrumentation)可获取服务的启动时间、进程ID等扩展信息。- 基本语法:
Get-CimInstance -ClassName Win32_Service -Filter "Name='<服务名>'" - 示例:
Get-CimInstance -ClassName Win32_Service -Filter "Name='Spooler'" | Select-Object Name, DisplayName, StartMode, State, StartTime - 输出字段:
StartMode对应启动类型,State对应状态,StartTime为启动时间(若服务未运行,此字段为空)。
- 基本语法:
Linux系统下查看服务启动信息
Linux系统服务管理因初始化系统不同(如systemd、SysVinit)而存在差异,现代Linux发行版(如Ubuntu 16+、CentOS 7+)多采用systemd,传统系统则使用SysVinit,以下分别介绍两种场景下的命令。
使用systemd(现代Linux发行版)
systemd是目前主流的初始化系统,通过systemctl命令管理服务,功能强大且支持丰富的状态查询。

-
systemctl list-units命令:
列出所有单元(服务、挂载点等),可按状态筛选。- 基本语法:
systemctl list-units [--type=service] [--state=状态] - 示例:
- 查看所有运行中的服务:
systemctl list-units --type=service --state=running - 查看所有失败的服务:
systemctl list-units --type=service --state=failed
- 查看所有运行中的服务:
- 输出字段:
LOAD(是否加载)、ACTIVE(当前状态,如active/inactive)、SUB(子状态,如running/exited)、DESCRIPTION(服务描述)。
- 基本语法:
-
systemctl status命令:
查看特定服务的详细状态,包括启动时间、进程ID、日志等。- 基本语法:
systemctl status [服务名] - 示例:
systemctl status nginx - 输出关键信息:
Active: active (running) since [时间]:服务运行状态及启动时间。Main PID: [PID]:主进程ID。Status: "[状态描述]":服务状态描述(如”OK”)。- 日志尾部:显示最近的服务日志(可通过
--no-pager禁用分页)。
- 基本语法:
-
systemctl is-active/is-enabled命令:
快速检查服务是否运行或是否设置为开机启动。- 基本语法:
systemctl is-active [服务名](返回active/inactive/failed) - 基本语法:
systemctl is-enabled [服务名](返回enabled/disabled/static)
- 基本语法:
-
journalctl命令(查看服务日志):
通过日志可追溯服务启动过程和错误信息。- 基本语法:
journalctl -u [服务名] [--since="时间"] - 示例:
journalctl -u nginx --since="2024-01-01"(查看nginx服务自2024年1月1日以来的日志)。
- 基本语法:
使用SysVinit(传统Linux系统)
老旧Linux系统(如CentOS 6、Ubuntu 14.04)使用service和chkconfig管理服务。
-
service命令:
查看或控制服务状态。- 基本语法:
service [服务名] [status|start|stop] - 示例:
service httpd status(查看Apache服务状态,返回httpd is running或httpd is stopped)。
- 基本语法:
-
chkconfig命令:
管理服务开机启动状态,可查看所有服务的启动级别。- 基本语法:
chkconfig --list [服务名] - 示例:
chkconfig --list httpd(输出显示服务在 runlevel 2-5 的启动状态,on表示开机启动,off表示禁用)。
- 基本语法:
macOS系统下查看服务启动信息
macOS基于Unix,使用launchd作为初始化系统,通过launchctl命令管理服务,同时也可结合ps和log命令查看进程和日志。
launchctl命令
launchctl是macOS服务管理的核心工具,用于加载、卸载和查询服务。
-
launchctl list命令:
列出所有已加载的服务(包括系统服务和第三方服务)。
- 基本语法:
launchctl list [服务名] - 示例:
- 查看所有服务:
launchctl list(输出列包含PID、Status、Label(服务标识))。 - 查看特定服务(如“com.apple.mDNSResponder”):
launchctl list "com.apple.mDNSResponder"
- 查看所有服务:
- 输出解析:
PID为-1表示服务未运行,数字表示进程ID;Status为0表示正常。
- 基本语法:
-
launchctl print命令(macOS 10.10+):
查看服务的详细配置信息,包括启动参数、依赖关系等。- 基本语法:
launchctl print [服务名] - 示例:
launchctl print "com.apple.sshd"(查看SSH服务的详细配置)。
- 基本语法:
ps命令和log命令
-
ps命令:通过进程列表查看服务是否运行。- 基本语法:
ps aux | grep [服务关键词] - 示例:
ps aux | grep "nginx"(查看nginx进程,确认服务是否运行)。
- 基本语法:
-
log命令(macOS 10.12+):查看系统日志,过滤服务相关日志。- 基本语法:
log show --predicate 'subsystem == "[服务标识]"' - 示例:
log show --predicate 'subsystem == "com.apple.sshd"' --last 1h(查看最近1小时SSH服务日志)。
- 基本语法:
不同系统命令对比
为方便查阅,以下表格汇总了Windows、Linux(systemd)、macOS下查看服务启动的核心命令及功能:
| 操作系统 | 工具/命令 | 功能描述 | 示例 |
|---|---|---|---|
| Windows (cmd) | sc query [服务名] |
查看服务状态和详细配置 | sc query Themes |
| Windows (PS) | Get-Service [服务名] |
获取服务对象信息(状态、启动类型等) | Get-Service -Name "Spooler" |
| Windows (PS) | Get-CimInstance |
获取服务启动时间等扩展信息 | Get-CimInstance -ClassName Win32_Service -Filter "Name='Spooler'" |
| Linux (systemd) | systemctl status [服务名] |
查看服务详细状态(含启动时间、日志) | systemctl status nginx |
| Linux (systemd) | systemctl list-units --type=service --state=running |
列出所有运行中的服务 | systemctl list-units --type=service --state=running |
| Linux (SysVinit) | service [服务名] status |
查看服务运行状态 | service httpd status |
| macOS | launchctl list [服务名] |
列出已加载服务及其PID状态 | launchctl list "com.apple.mDNSResponder" |
| macOS | log show --predicate 'subsystem == "[服务标识]"' |
查看服务日志 | log show --predicate 'subsystem == "com.apple.sshd"' |
相关问答FAQs
Q1:如何通过命令行精确查看服务的启动时间?
A:不同系统下获取启动时间的方法不同:
- Windows:使用PowerShell结合
Get-CimInstance,Get-CimInstance -ClassName Win32_Service -Filter "Name='Spooler'" | Select-Object Name, StartTime
若服务未运行,
StartTime为空。 - Linux (systemd):
systemctl status [服务名]会直接显示启动时间,systemctl status nginx # 输出中包含 "Active: active (running) since 2024-01-01 10:30:00 CST"
- macOS:通过
log命令查询服务首次启动时间,log show --predicate 'subsystem == "com.apple.sshd"' --start "$(date -v -1d)" | grep "Started" | tail -1
或使用
launchctl print [服务名]查看last loaded time(最近加载时间)。
Q2:为什么某些服务状态显示为“激活失败”(Failed),如何排查?
A:服务“激活失败”通常因配置错误、依赖缺失、资源不足或权限问题导致,排查步骤如下:
- Windows:
- 使用
eventvwr.msc打开事件查看器,查看“Windows日志”→“系统”中服务相关的错误事件(事件ID通常为7026、7000等)。 - 命令行可通过
wevtutil qe System /c:10 /rd:true /f:text | findstr "服务名"过滤日志。
- 使用
- Linux (systemd):
- 运行
systemctl status [服务名]查看日志尾部错误信息(如“Failed to listen on [地址]: 权限不足”)。 - 使用
journalctl -u [服务名] -b查看本次启动以来的服务日志,-b表示从本次启动开始。 - 检查服务依赖:
systemctl list-dependencies [服务名]确认依赖服务是否正常运行。
- 运行
- macOS:
- 运行
log show --predicate 'subsystem == "[服务标识]"' --last 1h查看最近1小时日志,定位错误信息。 - 检查服务配置文件位置(如
/Library/LaunchDaemons/或/System/Library/LaunchDaemons/),确认文件权限和语法正确。
- 运行
通过以上步骤,可快速定位服务激活失败的原因并针对性修复。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/16177.html