当前位置:首页>Linux>Linux服务管理,从 SysV 到 systemd 你必须搞清楚这些

Linux服务管理,从 SysV 到 systemd 你必须搞清楚这些

  • 2026-10-11 08:01:20
Linux服务管理,从 SysV 到 systemd 你必须搞清楚这些

CentOS 6 → 7/8/9 全版本对照 · 运行级别 · 救援模式实战

很多同学在生产环境里 service 和 systemctl 混着用,出了问题也不知道哪条命令才是"正确姿势"。本篇从服务的本质讲起,把两套体系放在一起对照,再附上救援模式实操,拿走即用。


服务到底是什么

Linux 里的"服务"指的是在后台持续运行的进程——系统启动时自动拉起,等待请求、响应请求,全程不需要人坐在终端前盯着。

后厨类比: 把服务想象成餐厅后厨,厨师在厨房持续待命(后台运行),餐厅开门就上岗(开机启动),有单子就出菜(响应请求),不需要顾客进厨房(无需用户交互)。

常见服务分三类:

类别
典型服务
作用
网络服务
sshdhttpdnginx
SSH 登录、Web 服务、反向代理
系统服务
cronrsyslogNetworkManager
定时任务、日志、网络管理
数据库 / 容器
mysqldpostgresqldocker
数据存储、容器引擎

CentOS 6:SysVinit 体系

CentOS 6 及之前用的是 SysVinit,核心命令是 service。

命令
功能
service <服务名> start
启动
service <服务名> stop
停止
service <服务名> restart
重启
service <服务名> reload
重新加载配置(不中断连接)
service <服务名> status
查看状态

注意:reload 与 restart 的区别——reload 只重读配置文件,已有连接不会断;restart 是完整的停止再启动,所有连接都会中断。生产环境优先用 reload。


CentOS 7/8/9:systemd 体系

从 CentOS 7 起,系统全面切换到 systemd,命令换成 systemctl,功能也更完整。

命令
功能
systemctl start <服务名>
启动
systemctl stop <服务名>
停止
systemctl restart <服务名>
重启
systemctl reload <服务名>
重新加载配置
systemctl status <服务名>
查看状态
systemctl enable <服务名>
设置开机自启
systemctl disable <服务名>
禁用开机自启
systemctl list-units
查看所有运行中的单元
systemctl list-unit-files
查看各服务开机自启状态

list-unit-files 里会看到三种状态:

  • enabled:开机自动启动
  • disabled:开机不自动启动
  • static:不会被自动拉起,但配置会被加载到内存,通常作为其他服务的依赖存在

以防火墙为例,几条常用操作:

# 查看防火墙状态systemctl status  firewalld.service# 停止 / 启动 / 重启systemctl stop    firewalld.servicesystemctl start   firewalld.servicesystemctl restart firewalld.service# 控制开机自启systemctl disable firewalld.servicesystemctl enable  firewalld.service

运行级别:两套体系对照

CentOS 6 用数字 0–6 表示运行级别,CentOS 7 改用 target 替代:

传统运行级别
systemd 目标
描述
0
poweroff.target
关机
1
rescue.target
救援 / 单用户模式
2、3、4
multi-user.target
多用户文本模式
5
graphical.target
图形界面
6
reboot.target
重启

关键细节: 在 systemd 中,运行级别 2、3、4 没有实质区别,全部映射到 multi-user.target。服务器生产环境默认跑 multi-user.target(等同于旧版 3 级),无需图形界面。

查看和修改默认运行级别:

# 查看当前默认目标systemctl get-default# → multi-user.target# 切换为图形模式(生产环境不建议)systemctl set-default graphical.target

还可以直接看 runlevel 符号链接的对应关系:

ll /usr/lib/systemd/system/runlevel*.target# runlevel0.target → poweroff.target# runlevel1.target → rescue.target# runlevel2.target → multi-user.target# runlevel3.target → multi-user.target# runlevel4.target → multi-user.target# runlevel5.target → graphical.target# runlevel6.target → reboot.target

救援模式:忘记 root 密码怎么办

两种思路:用系统内置的单用户模式,或者挂光盘进救援环境。

方法一:普通单用户模式重置密码

⚠️ 前置条件: 必须先关闭 SELinux。编辑 /etc/selinux/config,把 SELINUX=enforcing 改成 SELINUX=disabled,否则改完密码可能不生效。

操作步骤:

  1. 重启系统,在内核选择界面不要回车,按 e 进入编辑模式。

  2. 找到 linux16 这一行,把 ro(只读)改成 rw(读写),按 END 跳到行尾,追加 init=/bin/bash。

  3. 按 Ctrl+X 继续启动,系统会跳过正常初始化,直接进入无密码的 root shell。

  4. 此时有两种方式重置密码:直接运行 passwd 设置新密码;或用 vim /etc/passwd 把 root 那行的 x(密码占位)删掉,下次登录就不需要密码,进去再用 passwd 补上。

  5. 重启系统,用新密码或空密码登录,确认后记得重新用 passwd 设置一个强密码。


方法二:光盘救援模式

适用于系统文件损坏、引导失败等更严重的场景,整个原系统被挂载到 /mnt/sysimage 下。

操作步骤:

  1. 确认虚拟机已挂载 CentOS 安装镜像(ISO 光盘)。

  2. 重启,出现 logo 时按 ESC 进入 Boot Menu,选择 CD-ROM Drive。

  3. 依次选择 Troubleshooting → Rescue a CentOS system。

  4. 启动后输入 1 选第一项,两次回车进入命令行。

  5. 原系统挂载在 /mnt/sysimage,执行 chroot /mnt/sysimage 切换根目录,之后路径就和正常系统一样了,直接用 passwd 重置即可。

两种方式怎么选: 系统还能正常进 GRUB 菜单 → 单用户模式更快;系统连 GRUB 都进不了,或者文件系统损坏 → 只能走光盘救援。


本文内容对应 CentOS 6 / 7 / 8 / 9,核心命令在 RHEL 同系列发行版(Rocky Linux、AlmaLinux)同样适用。

#Linux#systemd#SRE#运维基础#CentOS#服务管理

线上服务凌晨三点告警,SRE靠这几招10分钟定位进程异常

最新文章

随机文章