systemctl 是 systemd 系统 的核心管理命令,用于服务、开机自启、系统状态、日志、电源等管理,主流 CentOS7+/Ubuntu16+/麒麟OS 都用它。
一、基础语法
bash
systemctl [选项] [操作] [服务名/单元名]
服务文件默认路径: /usr/lib/systemd/system/ 、 /etc/systemd/system/
二、常用分类命令(按场景)
1. 服务启停、重启、停止(最常用)
bash
# 启动服务
systemctl start 服务名
# 停止服务
systemctl stop 服务名
# 重启服务
systemctl restart 服务名
# 重新加载配置(不重启服务,只刷新配置)
systemctl reload 服务名
# 查看服务当前状态(重点)
systemctl status 服务名
status 字段说明
- active (running) :正常运行
- inactive (dead) :已停止
- failed :启动失败
- enabled :开机自启
- disabled :开机不自启
2. 开机自启管理
bash
# 设置开机自启
systemctl enable 服务名
# 关闭开机自启
systemctl disable 服务名
# 临时禁止开机启动(锁定,无法enable)
systemctl mask 服务名
# 解锁
systemctl unmask 服务名
# 查看是否开机自启
systemctl is-enabled 服务名
3. 查看系统/所有服务状态
bash
# 列出所有已加载单元(服务、挂载、套接字等)
systemctl list-units
# 只看正在运行的服务
systemctl list-units --type=service
# 查看所有已安装服务(含未启动)
systemctl list-unit-files --type=service
# 查看启动失败的服务
systemctl --failed
4. 重载系统服务配置(修改.service文件后必用)
修改了自定义服务文件后,必须执行刷新:
bash
systemctl daemon-reload
5. 系统全局操作(关机、重启、休眠)
bash
# 重启系统
systemctl reboot
# 关机
systemctl poweroff
# 挂起(休眠到内存)
systemctl suspend
# 休眠(写入硬盘)
systemctl hibernate
6. 查看系统运行级别/启动目标
Linux 现在用 target 替代旧的 runlevel:
bash
# 查看当前默认启动模式
systemctl get-default
# 设置为图形界面(桌面)
systemctl set-default graphical.target
# 设置为字符界面(纯命令行)
systemctl set-default multi-user.target
7. 查看服务依赖、详情
bash
# 查看服务详细信息、依赖、路径
systemctl show 服务名
# 查看该服务依赖哪些单元
systemctl list-dependencies 服务名
8. 管理服务日志(搭配 journalctl)
bash
# 查看指定服务日志
journalctl -u 服务名
# 实时滚动查看日志(类似 tail -f)
journalctl -u 服务名 -f
# 查看本次开机以来所有日志
journalctl -b
三、实战示例(直接复制可用)
以 sshd (远程ssh服务)举例:
bash
# 查看ssh状态
systemctl status sshd
# 启动ssh
systemctl start sshd
# 开机自启ssh
systemctl enable sshd
# 重启ssh
systemctl restart sshd
# 关闭开机自启
systemctl disable sshd
四、常见排错小技巧
1. 服务启动失败
先看状态: systemctl status xxx
再看详细日志: journalctl -u xxx -f
2. 改完 .service 文件不生效
执行: systemctl daemon-reload 再重启服务
3. 提示 Unit xxx could not be found
服务名写错,去 /usr/lib/systemd/system/ 核对真实服务名
五、简写速记表
功能 命令
启动 start
停止 stop
重启 restart
状态 status
开机自启 enable
关闭自启 disable
刷新配置 daemon-reload
查看日志 journalctl -u 服务名
需要我再教你如何手写一个自定义 systemd 服务(比如后台挂程序、开机自启脚本)吗?