Linux / Unix / macOS 系统
在 Linux 和 macOS 系统中,服务的管理方式主要分为两大类:systemd 和 SysVinit (V),目前绝大多数现代 Linux 发行版(如 Ubuntu 16.04+, CentOS 7+, Debian 8+)都使用 systemd。

使用 systemd (现代 Linux 发行版,如 Ubuntu, CentOS 7+, Debian)
systemd 是目前的主流,命令更简洁、功能更强大。
核心命令
要重启一个名为 nginx 的服务:
sudo systemctl restart nginx.service
或者,可以省略 .service 后缀(推荐):
sudo systemctl restart nginx
常用相关命令
| 功能 | 命令 | 说明 |
|---|---|---|
| 重启服务 | sudo systemctl restart <服务名> |
先停止,再启动,适用于服务已卡死但进程仍在运行的情况。 |
| 停止服务 | sudo systemctl stop <服务名> |
停止服务。 |
| 启动服务 | sudo systemctl start <服务名> |
启动服务。 |
| 重新加载服务配置 | sudo systemctl reload <服务名> |
优雅地重新加载配置文件,不中断服务连接。(推荐首选) |
| 重启或重新加载 | sudo systemctl reload-or-restart <服务名> |
如果服务支持 reload,则执行 reload;否则执行 restart,非常实用! |
| 查看服务状态 | sudo systemctl status <服务名> |
查看服务是否正在运行,并显示最近的日志。 |
| 启用开机自启 | sudo systemctl enable <服务名> |
设置服务在系统启动时自动运行。 |
| 禁用开机自启 | sudo systemctl disable <服务名> |
禁止服务在系统启动时自动运行。 |
| 查看所有服务 | systemctl list-units --type=service --state=running |
列出所有正在运行的服务。 |
示例: 假设你的 Nginx 配置文件修改了,最佳实践是:

# 1. 先尝试优雅地重新加载配置 sudo systemctl reload nginx # 如果报错说服务不支持 reload,或者你不确定,可以使用 reload-or-restart sudo systemctl reload-or-restart nginx # 如果服务已经完全卡死,无法响应 reload,再使用 restart sudo systemctl restart nginx
使用 SysVinit (旧版 Linux 或 macOS)
在一些较老的 Linux 发行版(如 CentOS 6, Debian 7)或 macOS 中,使用 service 命令。
核心命令
要重启一个名为 httpd (Apache) 的服务:
sudo service httpd restart
常用相关命令
| 功能 | 命令 | 说明 |
|---|---|---|
| 重启服务 | sudo service <服务名> restart |
重启服务。 |
| 停止服务 | sudo service <服务名> stop |
停止服务。 |
| 启动服务 | sudo service <服务名> start |
启动服务。 |
| 重新加载配置 | sudo service <服务名> reload |
优雅地重新加载配置。 |
| 查看服务状态 | sudo service <服务名> status |
查看服务状态。 |
Windows 系统
在 Windows 中,服务的管理主要通过命令行工具 sc 和 PowerShell。
使用 sc 命令 (通用命令行工具)
sc 是一个功能强大的命令行服务控制器,适用于所有 Windows 版本。

核心命令
要重启一个名为 "Spooler" (打印后台处理程序) 的服务:
sc stop Spooler sc start Spooler
或者使用更简洁的 restart 参数(Windows 7 及以上版本支持):
sc restart Spooler
常用相关命令
| 功能 | 命令 | 说明 |
|---|---|---|
| 重启服务 | sc <服务名> stop & sc <服务名> start 或 sc restart <服务名> |
先停止,再启动。 |
| 停止服务 | sc stop <服务名> |
停止服务。 |
| 启动服务 | sc start <服务名> |
启动服务。 |
| 查询状态 | sc query <服务名> |
查询服务的详细状态信息。 |
| 查询所有服务 | sc query state= all |
列出系统中所有服务的状态。 |
注意: sc 命令有时可能会因为权限问题或服务依赖而失败,此时需要以管理员身份运行命令提示符。
使用 PowerShell (现代 Windows 的首选)
PowerShell 提供了更面向对象的和更强大的 cmdlet 来管理服务。
核心命令
要重启一个名为 "Winmgmt" (Windows Management Instrumentation) 的服务:
Restart-Service -Name Winmgmt
常用相关命令
| 功能 | 命令 | 说明 |
|---|---|---|
| 重启服务 | Restart-Service -Name <服务名> |
重启服务。 |
| 重启服务 (显示名) | Restart-Service -DisplayName "<服务显示名>" |
使用服务的显示名来重启。 |
| 停止服务 | Stop-Service -Name <服务名> |
停止服务。 |
| 启动服务 | Start-Service -Name <服务名> |
启动服务。 |
| 获取服务状态 | Get-Service -Name <服务名> |
获取服务的状态。 |
| 获取所有服务 | Get-Service |
列出所有服务。 |
示例: 以管理员身份运行 PowerShell,然后执行:
# 重启 IIS 相关服务
Restart-Service -Name W3SVC
# 查看所有正在运行的服务
Get-Service | Where-Object {$_.Status -eq 'Running'}
macOS 特殊情况
除了通用的 launchd 和 service 命令,macOS 上有一些由 Apple 官方维护的服务,通常不直接通过 systemctl 或 service 重启,而是使用特定的命令。
| 服务 | 重启命令 | 说明 |
|---|---|---|
| DNS 解析 | sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder |
清除 DNS 缓存。 |
| 网络 | sudo ifconfig en0 down & sudo ifconfig en0 up |
(将 en0 替换为你的网络接口名,如 en1、Wi-Fi 等) |
| Core Animation | sudo killall -HUP Dock |
重启 Dock,有时可以解决界面卡顿问题。 |
| 窗口服务器 | sudo killall -HUP WindowServer |
重启窗口服务器,可解决图形界面严重问题。 |
总结与对比
| 操作系统 | 推荐工具 | 重启服务命令示例 | 备注 |
|---|---|---|---|
| 现代 Linux | systemd |
sudo systemctl restart nginx |
首选,功能强大,日志友好。 |
| 旧版 Linux | SysVinit |
sudo service httpd restart |
逐渐被 systemd 取代。 |
| Windows | PowerShell |
Restart-Service -Name Spooler |
首选,现代 Windows 的标准。 |
| Windows | sc |
sc restart Spooler |
通用性强,兼容性好。 |
| macOS | launchd / brew |
brew services restart <服务名> |
对于通过 Homebrew 安装的服务非常方便。 |
| macOS | Apple 命令 | sudo killall -HUP Dock |
用于系统核心组件。 |
重要提示: 在执行任何重启服务的命令之前,请确保:
- 你有管理员权限 (使用
sudo或以管理员身份运行)。 - 你知道服务名称 (通常是小写,没有空格,如
nginx,sshd,httpd)。 - 考虑对用户的影响,重启服务可能会导致短暂的服务中断。
