`

linux chkconfig 命令

阅读更多

 

<!-- 导航start-->
<script src="http://www.chinaunix.net/title.js"></script> A.title1:link {font-size:17.9px;font-family:arial;font-weight:bold;text-decoration:none;color:#ffffff;}A.title1:visited {font-size:17.9px;font-family:arial;font-weight:bold;text-decoration:none;color:#ffffff;}A.title1:active {font-size:17.9px;font-family:arial;font-weight:bold;text-decoration:none;color:#ffffff;}A.title1:hover {font-size:17.9px;font-family:arial;font-weight:bold;text-decoration:none;color:#ffffff;}A.title2:link {text-decoration:none;color:#000000;font-size:12px}A.title2:visited {text-decoration:none;color:#000000;font-size:12px}A.title2:active {text-decoration:none;color:#ff0000;font-size:12px}A.title2:hover {text-decoration:none;color:#ff0000;font-size:12px}
ChinaUnix.net
首页 | 论坛 | 博客 | Linux | 人才 | 培训 | 精华 | Wiki | 读书 | 资料 | 手册 | 下载 | 搜索
<!-- 导航end--><!-- 头部结束--><!-- 通栏广告开始-->
<script src="http://www.chinaunix.net/tuiguang/jh_top.js"></script>
<!-- 通栏广告结束-->
ChinaUnix首页 > 精华文章 > Linux > 正文

[精华] 用chkconfig 管理 Init 脚本[转贴]


http://www.chinaunix.net 作者:sky-walker   发表于:2006-04-12 16:17:43
发表评论 】 【查看原文 】 【Linux讨论区 】【关闭
<!-- 正文begin -->

用红帽子的 chkconfig 管理 Init 脚本
Jimmy Ball 翻译:Feng Dahui 

转载 LinuxAid



 

你的管理工具中多了个简单但非常有用的东东。 


我喜欢发现新的UNIX 命令,尤其是那些关于系统管理的。当我得知红帽子发布chkconfig 这个工具,我想起了在IRIX--一个 从 Silicon Graphics Inc.而来的UNIX变种--下的 chkconfig。 IRIX的chkconfig被用来激活/禁止系统 初始化的时候的服务,无需编辑,重命名或是移动 /etc中的init脚本。 

类似,Red Hat设计chkconfig的目的就是用来管理系统初始化的时候启动的服务。不过,在我仔细阅读手册并作了些测试后,我很快发 现 Red Hat扩展了chkconfig,通过管理init脚本的符号连接得以最终控制启动关闭时的系统任务,真是节省时间! 


关于启动的基础知识 


当你的linux启动时, 它显示的第一个进程是 init。如果你以前没看到过显示init进程, 输入: 

# ps -ef | grep init 

就会看到init的PID。 简而言之,init 运行 /etc/inittab中描述的任务。 

/etc/inittab中说明的任务在init之后就会启动, 不过其它的任务启动很简单。例如,默认情况下 Red Hat的/etc /inittab 对Ctrl-Alt-Delete键序设置了一个陷阱(trap),当这些键在控制台模式下(不是xdm)同时按下,就会运 行 shutdown 命令。 在启动的时候, init基于/etc/inittab 的设置选项设定这个特性,不过在这个键序发生的时候才会执 行。 

inittab 的格式允许以"#"开始注释行,正常的条目用 ":" 界定。遵从如下的格式: 

id:runlevel:action:process 

id 代表用户定义的唯一的标志, 
runlevel 可以使0-6的组合或者为空, 
action 来自一个关键词keyword 描述init如何对待process, 
process 是要执行的命令。 


描述action字段的各种关键字可以在inittab的手册中找到。常用的关键字, 不是全部, UNIX平台包括这些: 

initdefault--定义一个系统启动后进入的运行级 
wait --会被执行一次的进程 (当进入运行级的时候)。init 进程将等待这个进程被终止。 
boot --定义一个启动的时候执行的进程. 
bootwait --与 boot 类似 ,不过 init在继续运行前等待进程的终止 
sysinit --定义一个进程在 boot的时候执行,在任何 boot或者bootwait inittab 条目的前面执行。 

runlevel 字段指明系统状态。例如,运行级0代表系统关机,运行级6代表系统重启 。不幸的事,不是所有的Linux 发布都遵循同样的运行级定义 。在Red Hat中,默认情况下支持下面这些 

0. 系统挂起 
1. 但用户Single-user mode 
2. 多用户,没有NFS 
3. 完整的多用户Complete multiuser mode 
4. 用户自定义 
5. X11 (XDM 登陆) 
6. 重新启动 

每一个运行级在 /etc/rc.d下都有个相应的目录。如运行级5,目录就是/etc/rc.d/rc5.d 。包含启动这个运行级的时候运行 的相关任务的相关文件。在 Red Hat中, 这些文件一般都是 shell 脚本的符号连接,可以在/etc/rc.d/init.d中找到。 

让我们用一个简单的例子看一下这些东西, 下面这两个例子行来自我们的inittab文件: 


id:3:initdefault: 
l3:3:wait:/etc/rc.d/rc 3 

在Red Hat系统中这很典型。一旦init被启动 ,读取/etc/inittab 。 从第一行,我们知道 init 将在系统启动后从运 行运行级3。一旦我们到了那个运行级 ,第二行告诉 init 去运行脚本 /etc/rc.d/rc 3 并且在执行前等待终止. 

在/etc/rc.d目录的rc 脚本收到 3作为一个参数。 这个 3 相当于运行级3。结果 rc 脚本执行/etc/rc.d/rc3.d 目录中的所有脚本。它首先用参数"stop"执行所有 K (代表 "kill"杀掉进程或者服务)打头的脚本,接下来,它运行所有以 字母 S 打头的 脚本,带有参数"start" 启动进程或者服务。最后要指明,K和S脚本的执行顺序是基于排序的; 名为 S90mysql的脚本将 在 S95httpd之前执行。 

/etc/rc.d/rc3.d 中的脚本实际是对/etc/rc.d/init.d中文件的符号连接。 UNIX管理员可以在rc3.d中放制 文件, 实际情况下Red Hat的init.d目录是所有脚本的第一位置,然后声称逻辑连接到 rc*.d 目录。手工作这些文件的管理很烦人、琐 碎。 chkconfig现在接手这件事情! Red Hat 的这个chkconfig工具就是专为管理/etc/rc.d/rc[0-6].d中的符 号连接而设计。 


查看chkconfig 的项(Entries) 

chkconfig的二进制软件在 /sbin下,默认权限允许任何用户执行 。不过没有root权限的用户只能察看当前的chkconfig配置。输入 


[root]# chkconfig --list | grep on 

输出的部分内容大致如下: 

amd 0:off 1:off 2:off 3:off 4:on 5:on 6:off 
apmd 0:off 1:off 2:on 3:off 4:on 5:off 6:off 
arpwatch 0:off 1:off 2:off 3:off 4:off 5:off 6:off 
atd 0:off 1:off 2:off 3:on 4:on 5:on 6:off 
autofs 0:off 1:off 2:off 3:off 4:off 5:off 6:off 
named 0:off 1:off 2:off 3:off 4:off 5:off 6:off 
bootparamd 0:off 1:off 2:off 3:off 4:off 5:off 6:off 
keytable 0:off 1:off 2:on 3:on 4:on 5:on 6:off 
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off 
syslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off 
netfs 0:off 1:off 2:off 3:on 4:on 5:on 6:off 
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off 

在输出的每一行,最开始的段代表在 /etc/rc.d/init.d中的init脚本名。其余的区段表示脚本进入各个运行级时的各运行级0-6 的状态。 例如,crond应当在进入运行级2,3, 4,5 的时候启动,当进入 0, 1 and 6的时候停止。我们可以通过find命令查找在 /etc/rc.d中所有crond结尾的文件确信我们设置的正确性: 

[root]# find /etc/rc.d -name '*crond' -print 
/etc/rc.d/init.d/crond 
/etc/rc.d/rc0.d/K60crond 
/etc/rc.d/rc1.d/K60crond 
/etc/rc.d/rc2.d/S40crond 
/etc/rc.d/rc3.d/S40crond 
/etc/rc.d/rc4.d/S40crond 
/etc/rc.d/rc5.d/S40crond 
/etc/rc.d/rc6.d/K60crond 

注意chkconfig报告的每个 "off" 节 (0, 1, 6), 一个 kill脚本存在 script is in place 每 一个"on" 节 (2, 3, 4, 5),有一个 start脚本。 接下来,执行一个不同的 find 命令以确信每个发现的文件的类型: 

[root]# find /etc/rc.d -name '*crond' -exec file {} ; 
/etc/rc.d/init.d/crond: Bourne shell script text 
/etc/rc.d/rc0.d/K60crond: symbolic link to 
../init.d/crond 
/etc/rc.d/rc1.d/K60crond: symbolic link to 
../init.d/crond 
/etc/rc.d/rc2.d/S40crond: symbolic link to 
../init.d/crond 
/etc/rc.d/rc3.d/S40crond: symbolic link to 
../init.d/crond 
/etc/rc.d/rc4.d/S40crond: symbolic link to 
../init.d/crond 
/etc/rc.d/rc5.d/S40crond: symbolic link to 
../init.d/crond 
/etc/rc.d/rc6.d/K60crond: symbolic link to 
../init.d/crond 

这表明在init.d中找到的crond是一个shell脚本,找到的所有其他的文件都是对 crond 脚本的符号连接。 

调整chkconfig项 


调整chkconfig的 项几乎和列出现在的设置一样容易。格式: 


chkconfig [--level <运行级>;] <名字>; 

例如,如果我们决定在运行级 2禁止crond, 

# chkconfig --level 2 crond off 

(root执行) 会在运行级2关掉crond. 运行 chkconfig --list会确信crond的配置已经被调整。 更进一步,下面的find 命令command 显示一个 kill脚本已经在目录rc2.d中代替了 start脚本 : 

[root]# find /etc/rc.d -name '*crond' -print 
/etc/rc.d/init.d/crond 
/etc/rc.d/rc0.d/K60crond 
/etc/rc.d/rc1.d/K60crond 
/etc/rc.d/rc2.d/K60crond 
/etc/rc.d/rc3.d/S40crond 
/etc/rc.d/rc4.d/S40crond 
/etc/rc.d/rc5.d/S40crond 
/etc/rc.d/rc6.d/K60crond 

紧记 chkconfig不是立即自动禁止或激活一个服务的 它只是简单的改变了符号连接,超级用户可以用这个命令 /etc/rc.d /init.d/crond stop立刻禁止crond服务。最后,你可以用一个命令行激活/禁止多个运行级的某个命令 。例如输入: 

chkconfig --levels 2345 crond on 

会设定 crond 在运行级2, 3, 4 和 5启动。 


删掉一项 


有的时候,删掉一个服务也很恰当。 例如,针对sendmail, 在客户机上导入本地账号的邮件没有必要。运行sendmail最为守护进程就 不是必要的了。这种情况,我发现禁止sendmail服务很有必要,减少了潜在的安全问题,从chkconfig中删掉sendmail,输入: 

chkconfig --del sendmail 

在下面,我们的find命令显示该处没有符号连接了,不过sendmail的init脚本仍然有: 

[root]# find /etc/rc.d -name '*sendmail' -print /etc/rc.d/init.d/sendmail 

在我看来这很完美。脚本保留了,万一 sendmail 需要作为一个服务实现呢?不过所有的符号连接去掉了。我们能在每一个运行级禁止 sendmail 服务,这将在每一个rc*.d子目录中放置一个kill脚本,虽然sendmail从不在初始化阶段启动,是个不必要的任务,可是,我 曾看到一些系统管理员需要在特定的场合手工启动服务 。把kill脚本留在那里确保可以干净的杀掉服务。 


添加一个chkconfig 项 


到目前为止,一切顺利,我们已经知道使用chkconfig如何查看、调整、删掉服务。现在添加一个新的服务。看下面的脚本。 

---------------------------------------------------- 
Listing 1. Oracle Script 
---------------------------------------------------- 
#!/bin/sh<\n>; 红帽子的 

#chkconfig: 2345 80 05 
#description: Oracle 8 Server 

ORA_HOME=/usr/home/oracle/product/8.0.5 
ORA_OWNER=oracle 

if [ ! -f $ORA_HOME/bin/dbstart ] 
then 
echo "Oracle startup: cannot start" 
exit 
fi 

case "$1" in 
"start") 
su-$ORA_OWNER -c $ORA_HOME/bin/dbstart 
su-$ORA_OWNER -c "$ORA_HOME/bin/lsnrctl start" 
;; 
"stop") 
su-$ORA_OWNER -c $ORA_HOME/bin/dbshut 
su-$ORA_OWNER -c "$ORA_HOME/bin/lsnrctl stop" 
;; 
esac 
----------------------------------------------------- 


使用这个脚本, Oracle 8可以以参数 "start"启动,以 "stop" 参数停止。它符合init脚本的最小要求可以和 /etc/rc.d/rc脚本联合使用。 

把脚本放到 /etc/rc.d/init.d中并运行 (以 root) : 


chmod +x /etc/rc.d/init.d/oracle 

使你的脚本可执行 。如果你担心普通用户察看这个脚本,你可以设定更严格的文件权限 。只要这个脚本可以被root作为单独的脚本运行就可以。 

注意脚本中的两行注释: 


#chkconfig: 2345 80 05 
#description: Oracle 8 Server 

chkconfig需要这些行来决定如何实现初始运行级添加服务,如何设定启动和停止顺序的优先级 。这些行指明脚本将为运行级2,3,4,5启动 Oracle 8 服务。另外,启动优先权将被设定为 80而停止优先权设定为05。 

现在脚本在合适的位置,并且有合适的执行权限,以及恰当的chkconfig注释,我们可以添加init脚本,作为 root, 

# chkconfig --add oracle. 

用 chkconfig的查询,我们能核实我们所作的添加: 


[root]# chkconfig --list | grep oracle 
oracle 0:off 1:off 2:on 3:on 4:on 5:on 6:off 

而且,我们可以用标准的 find 命令察看chkconfig如何设定符号连接: 

[root]# find /etc/rc.d -name '*oracle' -print 

/etc/rc.d/init.d/oracle 
/etc/rc.d/rc0.d/K05oracle 
/etc/rc.d/rc1.d/K05oracle 
/etc/rc.d/rc2.d/S80oracle 
/etc/rc.d/rc3.d/S80oracle 
/etc/rc.d/rc4.d/S80oracle 
/etc/rc.d/rc5.d/S80oracle 
/etc/rc.d/rc6.d/K05oracle 

正如需要的那样,kill连接的名字包含优先权05而start连接包含80。如果你需要调整优先权,(e.g.我们停止的优先权需要设 为 03),简单的调整oracle init脚本的chkconfig 注释行并运行 reset命令 command,如下所示。符号连接会被改 名: 

[root]# chkconfig oracle reset 
[root]# find /etc/rc.d -name '*oracle' -print 
/etc/rc.d/init.d/oracle 
/etc/rc.d/rc0.d/K03oracle 
/etc/rc.d/rc1.d/K03oracle 
/etc/rc.d/rc2.d/S80oracle 
/etc/rc.d/rc3.d/S80oracle 
/etc/rc.d/rc4.d/S80oracle 
/etc/rc.d/rc5.d/S80oracle 
/etc/rc.d/rc6.d/K03oracle 

Red Hat 7中的改进 


大家可能都知道了,inetd在 Red Hat 7种已经被xinetd 所取代。而且,chkconfig 的功能已经被扩展,可以管理一些xinetd的Internet服务。例子如下: 


[root]# chkconfig --list 
... 
xinetd based services: 
finger: on 
linuxconf-web: off 
rexec: off 
rlogin: off 
rsh: off 
ntalk: off 
talk: off 
telnet: on 
tftp: off 
wu-ftpd: on 

禁掉一个 xinetd 服务,可能是 finger,你应该输入: 

[root]# chkconfig finger off. 

很简洁啊,呵呵。可是,这里有个问题。当配置已经改变,命令/etc/init.d/xinetd reload指明xinetd 自动重载入新 的配置,被 chkconfig执行。这个脚本运行一个带有SIGUSR2信号的kill 指示 xinetd 进行一个"硬"重配置。 

那意味着什么?哦,当我测试的时候,通过xinetd 提供的活动服务(i.e., Telnet, FTP, etc.)立刻被中止。 

如果你能计划在最合适的时间启动/禁止你的系统上的服务,可能不是个问题。作为一种替代方式,你可以调整你的/etc/init.d /xinetd脚本,这样 reload 选项发送一个 SIGUSR1 信号。 这是个"软"重配置。这将重启动你的服务而不中断你现存的连接。 chkconfig 管理下,添加xinetd服务只要简单的添加xinetd服务文件到 /etc/xinetd.d目录中。chkconfig会自动 的"捡起"它并使其可用,通过chkconfig 工具进行管理。简洁阿! 

结论 

现在你已经应该认识到红帽子的chkconfig工具管理init脚本的好处了,虽然它的功能似乎简单了些,但是它节省时间,这使其成为一个系统管理员适用的命令,值得记牢。

 



 jeffyan 回复于:2003-11-16 12:52:32

thx !!!


 双眼皮的猪 回复于:2003-11-16 13:45:57

前几天刚看过。不过是在linuxeden


 Fenng 回复于:2004-02-21 20:40:39

hoho ,

偶的这么久的翻译档了


 割鹿刀 回复于:2006-04-12 15:04:29

好贴!!!看过,谢了


 kaka_sun 回复于:2006-04-12 16:17:43

好啊,不错




原文链接:http://linux.chinaunix.net/bbs/viewthread.php?tid=203105
转载请注明作者名及原文出处


<!-- 正文end -->

<script src="http://www.chinaunix.net/tail.js"></script> .copyright { font-size: 12px; font-family: 'song',Verdana; color: #444444; letter-spacing: -1px;}a.copyright { color: #444444; text-decoration: none;}a.copyright:hover { color: #; text-decoration: underline;}

Copyright © 2001-2006 ChinaUnix.net   All Rights Reserved

感谢所有关心和支持过ChinaUnix的朋友们

京ICP证041476号

 

分享到:
评论

相关推荐

    Linux chkconfig命令用法详解

    Linux chkconfig命令 Linux chkconfig命令用于检查,设置系统的各种服务。 这是Red Hat公司遵循GPL规则所开发的程序,它可查询操作系统在每一个执行等级中会执行哪些系统服务,其中包括各类常驻服务。 语法 ...

    Linux chkconfig 命令的使用

    主要介绍了Linux chkconfig 命令的使用,帮助大家更好的理解和学习,感兴趣的朋友可以了解下

    Linux下chkconfig命令详解.docx

    Linux下chkconfig命令详解.docx

    Linux下的chkconfig命令详解

    大家都知道chkconfig命令在linux中使用是非常的关键的,我们可以利用chkconfig来对系统的一些启动与禁止相关设置,下面这篇文章小编就来给大家详细的介绍Linux下的chkconfig命令用法,有需要的朋友们可以参考学习,...

    linux命令详解之chkconfig命令使用方法

    chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息。谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接,下面看一下它是如何使用的

    Linux 添加系统服务、设置开机启动、设置启动顺序、chkconfig.docx

    文档是我自己亲自整理的文档,详细介绍了 chkconfig 命令,使用该命令再进行配置Linux的服务和启动服务

    Linux rsh命令用法详解

    Linux rsh命令 Linux rsh命令用于远端登入的Shell。 rsh(remote shell)提供用户环境,也就是Shell,以便指令能够在指定的远端主机上执行。 语法rsh [-dn][-l ][主机名称或IP地址][执行指令] 参数说明: -d 使用...

    Linux下面开起启动服务命令(chkconfig、ntsysv).docx

    Linux下面开起启动服务命令(chkconfig、ntsysv).docx

    使用 chkconfig 和 systemctl 命令启用或禁用 Linux 服务的方法

    在 Linux 中,无论何时当你安装任何带有服务和守护进程的包,系统默认会把这些服务的初始化及 systemd 脚本添加进去...下面小编给大家带来了使用 chkconfig 和 systemctl 命令启用或禁用 Linux 服务的方法,一起看看吧

    Linux命令搜索工具linux-command.zip

    Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。   Linux命令分类 这里存放Linux 命令大全并不全,你可以通过linux-command来搜索,它是把 command 目录里面搜集的...

    Linux命令大全完整版

    Linux命令大全完整版 目 录 目 录 I 1. linux系统管理命令 1 adduser 1 chfn(change finger information) 1 chsh(change shell) 1 date 2 exit 3 finger 4 free 5 fwhois 5 gitps(gnu interactive tools ...

    Linux命令大全(CHM格式离线版)

    Linux命令大全(CHM格式离线版) Linux命令大全(修改版) 进行重新编译的说明 文件传输 bye ftp ftpcount ftpshut ftpwho ncftp tftp uucico uucp uupick uuto 备份压缩 ar bunzip2 bzip2 bzip2recover compress cpio ...

    Linux应用技术:服务与进程管理.docx

    使用chkconfig命令修改vsftpd服务在2、3、5运行级别自启动(截图) 使用ps –e|grep vsftpd命令在所有进程中搜索vsftpd服务对应的进程,记下其进程号,然后使用kill命令结束该进程(截图) 重启vsftpd服务,再使用...

    Linux下安装卸载ftp的方法

    摘要 ftp是liunx下常用的软件之一。 1.将用户切换到root:su - ; 2.检查机器是否已经安装了ftp:rpm -qa|grep vsftpd;...5.检查ftp配置是否开启:chkconfig --list|grep vsftpd;此时返回的选项应该都是off;

    linux命令行小结

    需要说明的是对于Linux下的其它服务都可以用以上命令执行开启和关闭操作。 在开启了防火墙时,做如下设置,开启相关端口, 修改/etc/sysconfig/iptables 文件,添加以下内容: -A RH-Firewall-1-INPUT -m state -...

    linux设置服务开机自启动的三种方式

    这里介绍一下linux开机自动启动的几种方法,共计3种,大家可以借鉴一下!经验里面以centos 5.3系统为例!...方法2:利用命令行chkconfig命令进行设置 简要说明一下chkconfig命令的使用方法 –list:

    ubuntod安装datasophon问题记录

    chkconfig命令

Global site tag (gtag.js) - Google Analytics