chkconfig命令

chkconfig 命令 #

chkconfig是一个用于管理 System V 初始化脚本的命令行工具,主要用于 Red Hat、CentOS 和 Fedora 等基于 RPM 的 Linux 发行版。它用于更新和查询运行级别信息,以控制系统服务在系统启动时是否自动启动。

语法 #

chkconfig [选项] [服务名 [on|off|reset] [--level 级别]]

常用选项 #

选项 描述
--list [服务名] 列出所有服务及其当前配置
--add 服务名 添加新服务
--del 服务名 删除服务
--level 级别 指定运行级别(0-6)
--help 显示帮助信息
--version 显示版本信息

常见用法 #

1. 列出所有服务的运行级别配置 #

chkconfig --list

输出示例:

httpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off
mysqld          0:off   1:off   2:on    3:on    4:on    5:on    6:off
sshd            0:off   1:off   2:on    3:on    4:on    5:on    6:off

2. 查看特定服务的配置 #

chkconfig --list httpd

3. 启用服务在特定运行级别自动启动 #

chkconfig --level 35 httpd on

这将使 httpd 服务在运行级别 3 和 5 自动启动。

4. 禁用服务在特定运行级别自动启动 #

chkconfig --level 35 httpd off

5. 启用服务在所有运行级别自动启动 #

chkconfig httpd on

6. 禁用服务在所有运行级别自动启动 #

chkconfig httpd off

7. 添加新服务 #

chkconfig --add servicename

8. 删除服务 #

chkconfig --del servicename

9. 重置服务到默认状态 #

chkconfig servicename reset

运行级别 #

在 System V 初始化系统中,运行级别决定了哪些服务应该启动:

运行级别 描述
0 关机
1 单用户模式(救援模式)
2 多用户模式,无网络服务
3 多用户模式,有网络服务(文本界面)
4 未使用/用户自定义
5 多用户模式,有网络服务和图形界面
6 重启

服务脚本要求 #

要使用chkconfig管理服务,服务脚本(位于/etc/init.d/目录)必须包含特定的注释行:

# chkconfig: 2345 10 90
# description: 服务描述

其中:

  • 2345表示默认启用的运行级别
  • 10表示启动优先级(00-99,数字越小越早启动)
  • 90表示停止优先级(00-99,数字越大越早停止)

与 systemd 的关系 #

在使用 systemd 的现代 Linux 系统中,chkconfig命令可能仍然可用,但它通常是一个兼容层,将操作转换为相应的systemctl命令:

chkconfig 命令 systemctl 等效命令
chkconfig name on systemctl enable name.service
chkconfig name off systemctl disable name.service
chkconfig --list systemctl list-unit-files --type=service

实用示例 #

1. 配置 Web 服务器 #

# 启用Apache在启动时自动启动
chkconfig httpd on

# 仅在运行级别3和5启用
chkconfig --level 35 httpd on

# 检查配置
chkconfig --list httpd

2. 配置数据库服务 #

# 启用MySQL在启动时自动启动
chkconfig mysqld on

# 禁用MySQL在启动时自动启动
chkconfig mysqld off

# 检查配置
chkconfig --list mysqld

3. 批量配置多个服务 #

# 启用多个服务
for svc in httpd mysqld sshd; do
    chkconfig $svc on
done

# 禁用多个服务
for svc in cups bluetooth; do
    chkconfig $svc off
done

4. 创建自定义服务 #

  1. 创建服务脚本/etc/init.d/myservice
#!/bin/bash
# chkconfig: 2345 90 10
# description: My custom service

case "$1" in
    start)
        echo "Starting myservice..."
        # 启动命令
        ;;
    stop)
        echo "Stopping myservice..."
        # 停止命令
        ;;
    restart)
        echo "Restarting myservice..."
        $0 stop
        $0 start
        ;;
    status)
        echo "Status of myservice..."
        # 状态检查命令
        ;;
    *)
        echo "Usage: $0 {start|stop|restart|status}"
        exit 1
esac
exit 0
  1. 设置权限并添加到 chkconfig:
chmod 755 /etc/init.d/myservice
chkconfig --add myservice
chkconfig myservice on

常见问题排查 #

1. 服务未自动启动 #

可能的原因:

  • 服务脚本中的 chkconfig 注释行格式不正确
  • 服务脚本没有可执行权限
  • 服务依赖的其他服务未启动

解决方法:

# 检查服务脚本
head -n 5 /etc/init.d/servicename

# 检查权限
ls -l /etc/init.d/servicename

# 手动启动服务检查错误
service servicename start

2. chkconfig 命令未找到 #

在基于 Debian 的系统(如 Ubuntu)上,可能需要安装 sysv-rc-conf 包:

apt-get install sysv-rc-conf

然后使用sysv-rc-conf代替chkconfig

3. 无法添加服务 #

service servicename does not support chkconfig

解决方法:确保服务脚本包含正确的 chkconfig 注释行。

与其他服务管理工具的比较 #

工具 发行版 初始化系统 特点
chkconfig Red Hat/CentOS/Fedora System V 简单易用,运行级别管理
update-rc.d Debian/Ubuntu System V 更详细的控制,符号链接管理
systemctl 现代 Linux 发行版 systemd 统一的服务管理,依赖处理,并行启动
rc-update Gentoo/Alpine OpenRC 轻量级,灵活

提示 #

  • 在现代 Linux 系统中,推荐使用systemctl命令代替chkconfig
  • chkconfig主要用于管理服务的自动启动配置,不用于启动/停止服务(使用service命令)
  • 使用chkconfig --list可以快速查看所有服务的启动配置
  • 在脚本中使用chkconfig时,确保处理可能的错误返回码
  • 服务启动顺序由服务脚本中的优先级数字决定
  • 在容器化环境中,chkconfig通常不适用,因为容器一般不使用 System V 初始化系统