扫一扫
关注微信公众号

用红帽子的chkconfig管理Init脚本 (2)
2006-06-08   ChinaUnix

  有的时候, 删掉一个服务也很恰当。例如,针对 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 如何查看、调整、删掉服务。现在添加一个新的服务。看下面的脚本 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 脚本的好处了,虽然它的功能似乎简单了些,但是它节省时间,这使其成为一个系统管理员适用的命令,值得记牢。

热词搜索:

上一篇:用红帽子的chkconfig管理Init脚本 (1)
下一篇:赛迪顾问 05年中国刀片服务器市场统计

分享到: 收藏