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 腳本的好處了,雖然它的功能似乎簡單了些,但是它節省時間,這使其成為一個系統管理員適用的命令,值得記牢。