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 如何查看、调整、删掉服务。现在添加一个新的服务。看下面的脚本 oracle:
Listing 1. Oracle Script
#!/bin/sh
#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。如果你需要调整优先权,(如:我们停止的优先权需要设为 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
大家可能都知道了,inetd在 Red Hat 7中已经被xinetd 所取代(参考本站 "使用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 提供的活动服务(如 Telnet, FTP 等)立刻被中止。如果你能计划在最合适的时间启动/禁止你的系统上的服务,可能不是个问题。作为一种替代方式,你可以调整你的 /etc/init.d/xinetd 脚本 ,这样 reload 选项发送一个 SIGUSR1 信号。 这是个"软"重配置。这将重启动你的服务而不中断你现存的连接 。
chkconfig 管理下,添加xinetd服务只要简单的添加xinetd服务文件到 /etc/xinetd.d目录中。chkconfig会自动的"捡起"它并使其可用,通过chkconfig 工具进行管理。简洁阿!
现在你已经应该认识到红帽子的 chkconfig 工具管理 init 脚本的好处了,虽然它的功能似乎简单了些,但是它节省时间,这使其成为一个系统管理员适用的命令,值得记牢。