Linux 入门:用 systemctl 查看和管理系统服务

举报
f841705799 发表于 2026/11/10 09:39:35 2026/11/10
【摘要】 刚接触 Linux 时,很多人第一次遇到的问题都和服务有关:明明装好了 Nginx,浏览器却打不开页面;重启服务器后,数据库没有自动起来;改了配置文件,服务却好像没有生效。这些问题背后,几乎都离不开一个工具:systemctl。它是 systemd 的命令行入口,也是现代 Linux 发行版管理服务的标准方式。学会它,就等于拿到了系统服务的“总开关”。 一、什么是系统服务系统服务是在后台长期...

刚接触 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 服务器”的第一步。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。