人人都会AI编程

启动、停止、重启、状态查看

更新时间:2026-07-12

在 Linux 系统中,大部分后台服务(如 Web 服务器、数据库、SSH 服务等)都由 systemd 这个初始化系统统一管理。systemd 提供了 systemctl 命令,让你可以用一致的方式控制所有服务的生命周期,以及查看它们的实时状态。下面介绍最常见的几个操作,掌握它们就足以应对日常的服务管理工作。

1. 启动服务

sudo systemctl start nginx

这条命令会立即启动名为 nginx 的服务。如果服务已经在运行,该命令不会产生错误,只是不做任何状态改变。启动通常是瞬时的,但对于某些需要长时间初始化的服务,systemctl start 会等待启动过程完成(或超时)后才返回提示符。

2. 停止服务

sudo systemctl stop nginx

这会立即停止运行中的 nginx 服务。如果服务未在运行,命令同样安全。停止操作会向服务的主进程发送终止信号,让应用有机会释放资源;若超时未退出,systemd 会强制终止。

3. 重启服务

sudo systemctl restart nginx

这相当于先执行 stop,再执行 start。绝大多数情况下,修改配置文件后都需要执行重启来让新配置生效。需要注意,restart 会短暂中断服务,对于生产环境,有时更推荐使用下面“软重启”的命令。

4. 平滑重载配置

sudo systemctl reload nginx

并非所有服务都支持 reload,只有那些在编写 service 文件时显式实现了重载逻辑的服务才有效(比如 nginx、Apache 等)。reload 告诉服务进程重新读取配置文件,而不中断现有的连接和请求,是滚动更新配置的首选方式。如果某个服务不支持 reload,执行该命令会报错,此时你只能使用 restart

5. 查看服务状态

systemctl status nginx

这是日常排错中最常用的命令,它会返回一个信息密集的状态摘要:

  • 服务名称、描述、加载状态(loaded/enabled/disabled 等)
  • 当前是否活跃(active/inactive)
  • 主进程 PID 及运行时长
  • 最近的几条日志片段(默认输出约 10 行)
  • 如果是失败状态,还会显示退出码和简要原因

例如,当 nginx 启动失败时,systemctl status nginx 通常能直接显示出配置文件哪一行语法错误,让你不用单独翻看整个日志文件。这个命令是快速诊断服务问题的第一入口。

6. 设置开机自启与禁用
以上 start/stop/restart 控制的是服务的即时运行状态,而它们不会影响系统重启后的行为。要控制服务是否在系统启动时自动运行,需要使用 enabledisable

sudo systemctl enable nginx   # 设置开机自启
sudo systemctl disable nginx  # 取消开机自启

可以用 systemctl is-enabled nginx 快速检查某个服务是否被设为开机启动。

7. 查看服务的完整日志
systemctl status 只显示最近的几行日志,如需深入查看服务历史输出,要用 journalctl

journalctl -u nginx            # 查看 nginx 的全部日志
journalctl -u nginx -f        # 实时跟踪(类似 tail -f)
journalctl -u nginx --since "10 minutes ago"  # 按时间过滤

因为服务通常把运行日志输出到标准输出/标准错误,systemd 会自动捕获并存储,所以 journalctl 可以取代过去需要 grep /var/log/ 的工作,集中管理所有服务的日志。

实用小结
作为日常工作流,一套典型的操作顺序是:

  1. systemctl status 服务名 —— 先看看现在是什么状态;
  2. 若需调整配置,修改配置文件后用 systemctl reload 服务名 让新配置生效;
  3. 如果必须重启,执行 systemctl restart 服务名
  4. 最后用 status 确认服务运行正常;
  5. 如果要做长期部署,不要忘记 systemctl enable 服务名 保证开机后服务自动拉起来。

这几个命令覆盖了绝大部分服务管理场景,简单、直接,而且适用于所有遵循 systemd 规范的服务,无论它是自己开发的程序还是系统自带的守护进程。