Linux 入门:用 systemctl 查看和管理系统服务
刚接触 Linux 时,很多人第一次遇到的问题都和服务有关:明明装好了 Nginx,浏览器却打不开页面;重启服务器后,数据库没有自动起来;改了配置文件,服务却好像没有生效。这些问题背后,几乎都离不开一个工具:systemctl。它是 systemd 的命令行入口,也是现代 Linux 发行版管理服务的标准方式。学会它,就等于拿到了系统服务的“总开关”。
一、什么是系统服务
系统服务是在后台长期运行的程序,比如 Web 服务 Nginx、数据库 MySQL、SSH 服务 sshd。它们不依赖某个终端窗口存在,开机后由 systemd 统一拉起,崩溃后还可以按策略自动重启。systemd 会为每个服务维护一个 unit 文件,通常以 .service 结尾,里面记录了启动命令、依赖关系、重启策略和日志去向。理解这一点很重要:我们管理的不是一个孤立的进程,而是一个由 systemd 托管的服务单元。
二、查看单个服务的状态
最常用的命令是 status,它会一次性给出服务是否运行、进程号、最近几行日志和配置文件路径:
systemctl status nginx
systemctl status sshd
输出里的 Active 一行最值得先看:active (running) 表示正在运行,inactive (dead) 表示已停止,failed 表示启动失败。如果是 failed,先不要急着重启,往下翻日志往往能看到报错原因,比如端口被占用、配置文件写错、权限不足。
只想快速判断,不想看完整输出,可以用 is-active 和 is-enabled:
systemctl is-active nginx
systemctl is-enabled nginx
前者回答“现在跑着吗”,后者回答“开机自启吗”,两个答案经常不一样,这正是很多新手困惑的地方:服务现在是启动的,但没有设置开机自启,重启后就没了。
三、列出所有服务
想看看系统里都有哪些服务,可以用 list-units:
systemctl list-units --type=service
systemctl list-units --type=service --state=failed
systemctl list-unit-files --type=service
第一条列出当前已加载的服务,第二条只列出启动失败的服务,排查问题时非常高效,第三条则列出所有服务文件及其开机自启状态。配合 grep 还能快速定位,比如 systemctl list-units --type=service | grep mysql。
四、启动、停止与重启
服务的日常操作只有几个动词,记住它们就能覆盖大部分场景:
systemctl start nginx # 启动服务
systemctl stop nginx # 停止服务
systemctl restart nginx # 重启服务
systemctl reload nginx # 不中断服务,重载配置
start 和 restart 的区别值得注意:start 只在服务没跑时拉起它,restart 则是先停再起。改了配置文件后,优先用 reload,它会让服务重新读取配置而不中断已有连接;如果服务不支持 reload,再用 restart。
开机自启是另一个独立开关:
systemctl enable nginx # 设置开机自启
systemctl disable nginx # 取消开机自启
enable 并不会立刻启动服务,它只是建立一个开机启动的链接;同样,disable 也不会立刻停止正在运行的服务。部署新服务时,常见的完整操作是 systemctl enable --now nginx,–now 表示“既设置自启,也马上启动”,一步到位。
五、用 journalctl 看服务日志
服务出问题时,systemctl status 只显示最近几行日志,想看完整记录要用 journalctl:
journalctl -u nginx
journalctl -u nginx -f
journalctl -u nginx --since "today"
-u 指定服务名,-f 表示实时跟随输出,像 tail -f 一样看新日志,–since 可以限定时间范围。把“状态 + 日志”结合起来,九成以上的服务故障都能定位到原因,而不是凭感觉反复重启。
六、新手常踩的三个坑
第一,改了配置没有 reload。很多服务启动时会把配置读进内存,改完文件必须 reload 或 restart,否则新配置根本不会生效。第二,分不清 enable 和 start。只 start 不 enable,重启后服务就没了;只 enable 不 start,当前这次还是没跑起来。第三,用错命令重启了不该停的服务,比如在远程服务器上 systemctl restart sshd 之前,最好确认自己还有别的登录方式,或者先用 reload 规避风险。
七、给新手的练习清单
找一台测试机,依次完成这几个动作:用 status 查看 sshd 的状态;用 list-units 找出一个 failed 的服务并看它的日志;给一个服务做 enable --now,再用 is-enabled 确认;故意改错一个配置,观察 failed 状态和日志,再改回来恢复。走完这一圈,systemctl 的核心用法就基本掌握了。
结语
systemctl 的命令并不多,但它背后是 systemd 对服务全生命周期的管理:启动、停止、自启、依赖、日志。入门阶段不用背下所有参数,先把 status、start、stop、restart、enable、journalctl 这几个命令用熟,遇到服务问题时先看状态、再看日志、最后动手,慢慢就会形成稳定的排查习惯。这也是从“会用 Linux”走向“能管好一台 Linux 服务器”的第一步。
- 点赞
- 收藏
- 关注作者
评论(0)