systemctl 管理服务本质是操作 systemd 单元,区分运行状态(内存)与启用状态(磁盘);status 查整体信息,is-active/is-enabled/is-failed 查单项状态,start/stop/restart 控制运行,enable/disable 管理自启,mask 彻底禁用,journalctl 辅助排查。

Linux 中使用 systemctl 管理服务,核心是理解它操作的是 systemd 的“单元”(unit),而不是传统脚本。服务只是其中一种单元类型(.service),命令行为围绕两个独立状态展开:当前是否在运行(内存中),以及是否设置开机自启(磁盘上软链接)。搞清这点,就不会误以为 enable 会启动服务,或 disable 会立刻停掉它。
查看服务当前状态和配置信息
最常用也最直观的入口是 status,它把运行状态、进程详情、最近日志、启用状态全整合在一个输出里:
-
systemctl status nginx—— 查看 Nginx 是否 active、PID、启动时间、最后几行 journal 日志 -
systemctl is-active nginx—— 只返回active或inactive,适合脚本判断 -
systemctl is-enabled nginx—— 返回enabled/disabled/masked,确认开机自启设置 -
systemctl is-failed nginx—— 快速检查服务是否处于失败(failed)状态
控制服务的当前运行状态
这些命令只影响服务此刻是否运行,不改变开机自启设置:
-
sudo systemctl start nginx—— 启动服务(若已运行则报错) -
sudo systemctl stop nginx—— 停止服务(立即终止进程) -
sudo systemctl restart nginx—— 先 stop 再 start,有短暂中断 -
sudo systemctl reload nginx—— 仅重载配置(如 Nginx、SSH 支持),连接不断开 -
sudo systemctl reload-or-restart nginx—— 自动判断:支持 reload 就 reload,否则 fallback 到 restart -
sudo systemctl try-restart nginx—— 仅当服务正在运行时才执行 restart,避免误启已停服务
管理服务的开机自启行为
这部分操作修改的是磁盘上的符号链接,不影响当前运行状态:
-
sudo systemctl enable nginx—— 创建/etc/systemd/system/multi-user.target.wants/nginx.service软链接 -
sudo systemctl disable nginx—— 删除上述软链接 -
sudo systemctl enable --now nginx—— 一步完成:启用自启 + 立即启动(推荐新服务部署时用) -
sudo systemctl disable --now nginx—— 一步完成:禁用自启 + 立即停止 -
sudo systemctl mask nginx—— 把服务链接到/dev/null,彻底禁止启动(连依赖它的服务也无法拉起它) -
sudo systemctl unmask nginx—— 解除屏蔽,恢复正常使用
排查与维护常用辅助命令
遇到问题时,这几个命令能快速定位根源:
-
journalctl -u nginx -n 50—— 查看该服务最近 50 行日志 -
journalctl -u nginx --since "2 hours ago"—— 查看两小时内日志 -
journalctl -u nginx -f—— 实时跟踪日志输出(类似tail -f) -
systemctl list-dependencies nginx—— 查看它依赖哪些其他单元(如 network.target) -
systemctl list-unit-files --type=service | grep nginx—— 查看该服务单元文件是否存在、状态是否为enabled/static/masked -
sudo systemctl daemon-reload—— 修改了.service文件后必须执行,让 systemd 重新加载配置


















