歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux基礎知識

Linux之chkconfig命令知識

chkconfig命令主要用來更新(啟動或停止)和查詢系統服務的運行級信息。謹記chkconfig不是立即自動禁止或激活一個服務,它只是簡單的改變了符號連接。

使用語法:
chkconfig [--add][--del][--list][系統服務] 或 chkconfig [--level <等級代號>][系統服務][on/off/reset]

chkconfig在沒有參數運行時,顯示用法。如果加上服務名,那麼就檢查這個服務是否在當前運行級啟動。如果是,返回true,否則返回false。如果在服務名後面指定了on,off或者reset,那麼chkconfi 會改變指定服務的啟動信息。on和off分別指服務被啟動和停止,reset指重置服務的啟動信息,無論有問題的初始化腳本指定了什麼。on和off開關,系統默認只對運行級3,4,5有效,但是reset可以對所有運行級有效。

參數用法:
   --add  增加所指定的系統服務,讓chkconfig指令得以管理它,並同時在系統啟動的敘述文件內增加相關數據。
   --del  刪除所指定的系統服務,不再由chkconfig指令管理,並同時在系統啟動的敘述文件內刪除相關數據。
   --level<等級代號>  指定讀系統服務要在哪一個執行等級中開啟或關畢。
      等級0表示:表示關機
      等級1表示:單用戶模式
      等級2表示:無網絡連接的多用戶命令行模式
      等級3表示:有網絡連接的多用戶命令行模式
      等級4表示:不可用
      等級5表示:帶圖形界面的多用戶模式
      等級6表示:重新啟動
      需要說明的是,level選項可以指定要查看的運行級而不一定是當前運行級。對於每個運行級,只能有一個啟動腳本或者停止腳本。當切換運行級時,init不會重新啟動已經啟動的服務,也不會再次去停止已經停止的服務。

    chkconfig --list [name]:顯示所有運行級系統服務的運行狀態信息(on或off)。如果指定了name,那麼只顯示指定的服務在不同運行級的狀態。
    chkconfig --add name:增加一項新的服務。chkconfig確保每個運行級有一項啟動(S)或者殺死(K)入口。如有缺少,則會從缺省的init腳本自動建立。
    chkconfig --del name:刪除服務,並把相關符號連接從/etc/rc[0-6].d刪除。
    chkconfig [--level levels] name:設置某一服務在指定的運行級是被啟動,停止還是重置。

運行級文件:
每個被chkconfig管理的服務需要在對應的init.d下的腳本加上兩行或者更多行的注釋。第一行告訴chkconfig缺省啟動的運行級以及啟動和停止的優先級。如果某服務缺省不在任何運行級啟動,那麼使用 - 代替運行級。第二行對服務進行描述,可以用\ 跨行注釋。
例如,random.init包含三行:
# chkconfig: 2345 20 80
# description: Saves and restores system entropy pool for \
# higher quality random number generation.

使用范例:
chkconfig --list        #列出所有的系統服務
chkconfig --add httpd        #增加httpd服務
chkconfig --del httpd        #刪除httpd服務
chkconfig --level httpd 2345 on        #設置httpd在運行級別為2、3、4、5的情況下都是on(開啟)的狀態
chkconfig --list        #列出系統所有的服務啟動情況
chkconfig --list mysqld        #列出mysqld服務設置情況
chkconfig --level 35 mysqld on        #設定mysqld在等級3和5為開機運行服務,--level 35表示操作只在等級3和5執行,on表示啟動,off表示關閉
chkconfig mysqld on        #設定mysqld在各等級為on,“各等級”包括2、3、4、5等級

如何增加一個服務:
1.服務腳本必須存放在/etc/ini.d/目錄下;
2.chkconfig --add servicename
    在chkconfig工具服務列表中增加此服務,此時服務會被在/etc/rc.d/rcN.d中賦予K/S入口了;
3.chkconfig --level 35 mysqld on
    修改服務的默認啟動等級。

      注意:service的安裝目錄在/etc/rc.d/init.d下,/etc/init.d 是/etc/rc.d/init.d的鏈接。chkconfig命令用來安裝,查看或修改 services隨系統啟動的啟動選項的設置。本文章包含了7個實例來解釋如何使用chkconfig命令。

1 在shell腳本中檢查service的啟動選項的設置

    當你執行chkconfig加service名字,如果service被配置為自動啟動,則它將返回true。下列的代碼段顯示了如何在腳本中檢查一個service是否被配置為自動啟動。

1 # vi check.sh
2 chkconfig network && echo "Network service is configured"
3 chkconfig junk && echo "Junk service is configured"
4 # ./check.sh
5 Network service is configured

你也可以特別地查看它是否配置為在某個run level自動啟動。

1 # vi check1.sh
2 chkconfig network --level 3 && echo "Network service is configured for level 3"
3 chkconfig network --level 1 && echo "Network service is configured for level 1"
4 # ./check1.sh
5 Network service is configured for level 3

2 查看所有的services的啟動選項的設置

--list選項顯示所有的services的啟動選項的配置狀態。

1 # chkconfig --list
2 abrtd 0:off 1:off 2:off 3:on 4:off 5:on 6:off
3 acpid 0:off 1:off 2:off 3:off 4:off 5:off 6:off
4 atd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
5 ...

只查看在某個runlevel啟動的services,例如查看在runlevel3下自動啟動的services。

1 chkconfig --list | grep 3:on

查看某個service的啟動選項的設置,也可以對chkconfig --list 的output使用grep,例如:chkconfig --list | grep network

3 增加一個新的service為自動啟動

    使用-add選項來增加某個service,使其能夠在系統啟動的時候自動地啟動。下列的實例顯示了如何增加一個新的service iptables,使其能夠在系統啟動的時候自動地啟動。使用‘chkconfig --add’命令將自動地設置在runlevel 2,3,4,5上自動地啟動。

1 # chkconfig --list | grep iptables
2 # chkconfig --add iptables
3 # chkconfig --list | grep iptables
4 iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off

    注意:”chkconfig --add“ 只是設置一個存在的service為自動啟動,此service必須已經安裝,即已經存在於/etc/rc.d/init.d下。如果service不存在,你需要首先安裝service到/etc/rc.d/init.d下,然後再為其設置自動啟動選項。這是很多的初學者都容易犯的錯誤,所以值得在這裡強調。

4 刪除某個service的自動啟動選項的設置

下列的實例顯示了ip6tables service被配置為自動啟動。

1 # chkconfig --list | grep ip6tables
2 ip6tables 0:off 1:off 2:off 3:on 4:off 5:off 6:off

要刪除某個service的自動啟動的設置,使用--del選項,如下:

1 # chkconfig --del ip6tables
2 # chkconfig --list | grep ip6tables

5 設置或取消某個service在某個runlevel的自動啟動設置
     有時你可能不想取消整個service的自動啟動的設置,你只是需要設置或取消service在某個runlevel的自動啟動的設置,下列的實例將取消nfserver service在runlevel5的自動啟動設置

1 # chkconfig --level 5 nfsserver off

你也可以組合多個runlevel,例如你可以取消nfserver在runlevel3和5的自動啟動設置

1 # chkconfig --level 35 nfsserver off

6 chkconfig 與 rc*.d目錄下的腳本 (*表示runlevel1-6)

    當你使用chkconfig來增加或刪除某個service的自動啟動選項的設置的時候,其實是在rc*.d目錄下做下列的事情:
當chkconfig --add命令執行的時候,其實是在對應的rc*.d目錄下創建相應用來啟動和停止service的service的symbollink文件;
當chkconfig --del命令執行的時候,其實是在對應的rc*.d目錄下刪除相應用來啟動和停止service的service的symbollink文件;

rc*.d目錄下與某個service關聯的2個symbollink文件中,以K(kill)開始的表示此文件用來停止service,以S(start)開始的表示此文件用來啟動service。例如service nfsserver沒有設置自動啟動選項的時候,我們在/rc*.d下看不到用來啟動和停止service的symbollink文件

1 # chkconfig --list | grep nfsserver
2 nfsserver 0:off 1:off 2:off 3:off 4:off 5:off 6:off
3 # ls /etc/rc.d/rc3.d | grep nfsserver
4 # ls /etc/rc.d/rc5.d | grep nfsserver

當我們為nfsserver service設置自動啟動選項後,我們就可以看到相應的symbollink文件了

 1 # chkconfig --add nfsserver
 2 nfsserver 0:off 1:off 2:off 3:on 4:off 5:on 6:off
 3 
 4 # cd /etc/rc.d/rc3.d
 5 # ls -l | grep nfsserver
 6 lrwxrwxrwx 1 root root 12 2011-06-18 00:52 K08nfsserver -> ../init.d/nfsserver
 7 lrwxrwxrwx 1 root root 12 2011-06-18 00:52 S14nfsserver -> ../init.d/nfsserver
 8 
 9 # cd /etc/rc.d/rc5.d
10 # ls -l | grep nfsserver
11 lrwxrwxrwx 1 root root 12 2011-06-18 00:52 K08nfsserver ->../init.d/nfsserver
12 lrwxrwxrwx 1 root root 12 2011-06-18 00:52 S14nfsserver -> ../init.d/nfsserver

當你取消此service在某個runlevel的自動啟動選項的設置的時候,對應的rc*.d目錄下的symbollink文件也將被自動的刪除,

1 # chkconfig --level 5 nfsserver off
2 # ls /etc/rc.d/rc5.d | grep nfsserver

 

Copyright © Linux教程網 All Rights Reserved