博客 / Linux/ CentOS/RHEL 系统查看与管理开机启动项完整指南

CentOS/RHEL 系统查看与管理开机启动项完整指南

CentOS/RHEL 系统查看与管理开机启动项完整指南

理解 Linux 运行级别与启动项

Linux 系统定义了 7 个运行级别(Runlevel),用于控制不同状态下系统启动的服务:

  • 0:关机
  • 1:单用户模式(救援模式)
  • 2:多用户模式,无网络(通常未使用)
  • 3:完整的多用户文本模式(服务器常用)
  • 4:保留,通常未使用
  • 5:图形界面模式(桌面常用)
  • 6:重启

要查看所有服务在各个运行级别的启动状态,可以使用 chkconfig --list 命令。

使用 chkconfig 管理服务启动状态

chkconfig 是 CentOS/RHEL 6 及之前版本管理 SysV init 服务的主要工具。其基本语法如下:

# 查看服务状态
chkconfig --list [服务名]

# 设置服务在指定运行级别开启或关闭
chkconfig --level [级别列表] [服务名] {on|off}

# 添加或删除服务管理
chkconfig --add [服务名]
chkconfig --del [服务名]

示例:管理 SSH 服务

例如,要在运行级别 3 和 5 关闭 sshd 服务,可以执行:

chkconfig --level 35 sshd off

要查看修改后的状态:

chkconfig --list sshd

手动管理启动脚本目录

除了使用 chkconfig,你也可以直接操作 /etc/rc.d/ 目录下的文件来管理启动项。

# 查看 /etc/rc.d/ 目录结构
ls /etc/rc.d/

# 输出示例(CentOS 6):
# init.d  rc0.d  rc1.d  rc2.d  rc3.d  rc4.d  rc5.d  rc6.d  rc.local  rc.sysinit
  • init.d/:存放所有服务的启动脚本。
  • rcN.d/(N=0~6):对应各个运行级别的符号链接目录。
  • rc.local:系统最后执行的自定义启动脚本。
  • rc.sysinit:系统初始化脚本。

解读 rcN.d 目录中的文件

rc3.d/(运行级别 3)为例:

ls /etc/rc.d/rc3.d/

# 示例输出:
# K02avahi-dnsconfd  S25bluetooth
# K02NetworkManager  S25netfs
# S04readahead_early S26apmd
  • K 开头:进入该运行级别时需要停止的服务。数字代表执行顺序。
  • S 开头:进入该运行级别时需要启动的服务。数字代表执行顺序。

重要规则:系统会先按数字顺序执行所有 K(Kill)脚本,再按顺序执行所有 S(Start)脚本。因此,S 脚本的启动命令会覆盖 K 脚本的停止命令(如果针对同一服务)。

设置程序开机自启动的常用方法

假设你需要让 vncserver 在系统启动后自动运行,以下是几种实现方法。

方法一:将程序注册为系统服务(推荐)

这是最规范的方法,适用于长期运行的后台程序。

  1. 检查服务状态

    chkconfig --list | grep vnc
  2. 设置开机启动(例如在运行级别 5):

    chkconfig --level 5 vncserver on
  3. 验证设置

    chkconfig --list | grep vnc
    # 输出应显示:vncserver 0:off ... 5:on 6:off

方法二:使用 /etc/rc.local 脚本

/etc/rc.local 是系统在所有初始化脚本执行完毕后最后运行的脚本。适合添加简单的启动命令。

# 编辑 rc.local 文件
vi /etc/rc.local

# 在文件末尾(exit 0 之前)添加你的命令,例如:
/usr/bin/vncserver :1

# 确保 rc.local 有可执行权限
chmod +x /etc/rc.local

方法三:创建自定义 Systemd 服务(CentOS/RHEL 7+)

注意:CentOS/RHEL 7 及以上版本使用 systemd 替代了 SysV init。管理命令已更新:

# 查看服务状态
systemctl status [服务名]

# 设置开机启动
systemctl enable [服务名]

# 立即启动服务
systemctl start [服务名]

# 查看所有已启用的服务
systemctl list-unit-files --type=service | grep enabled

对于自定义程序,你需要创建一个 .service 文件在 /etc/systemd/system/ 目录下。

重要区别与联系

  • Linux 服务:由 init 系统(SysV init 或 systemd)管理的后台守护进程,具有完整的生命周期控制(启动、停止、重启、状态查看)。
  • 开机自启动:是服务的一个属性。一个服务可以被设置为开机自启动,但并非所有开机自运行的命令都是标准的“服务”。
  • 关键脚本文件
    • /etc/rc.local:用于用户自定义命令。
    • /etc/inittab(旧版):定义默认运行级别和某些终端。
    • /etc/profile~/.bash_profile:用户登录时执行的 Shell 环境配置脚本,不应用于启动后台服务

总结与最佳实践

  1. 优先使用服务管理工具:对于标准服务,始终使用 chkconfig(CentOS 6)或 systemctl(CentOS 7+)进行管理。
  2. 使用 rc.local 作为补充:对于无法或不便封装成服务的简单脚本或命令,可放入 /etc/rc.local
  3. 注意权限:确保启动脚本和命令具有正确的执行权限。
  4. 明确运行级别:服务器环境通常使用运行级别 3(无图形界面),桌面环境使用运行级别 5。
  5. 版本适配:CentOS/RHEL 7 开始已全面转向 systemd,请使用对应的 systemctl 命令进行服务管理。

发表评论

您的邮箱不会公开。必填项已用 * 标注。