init.d目錄、rc#.d目錄和rc.local腳本——系統服務的啓動和停止

[參考] http://blog.csdn.net/acs713/article/details/7322082
[參考] http://www.cnblogs.com/see7di/archive/2011/06/17/2239723.html

一、init.d目錄

如果你使用過Linux系統,那麼你一定聽說過init.d目錄。它是各種服務器和程序的二進制文件存放目錄,關乎系統服務的啓動和停止。

1、init.d目錄所處的路徑

在Ubuntu系統中,是放置在/etc/init.d;但是在Fedora系統中,是被放置在/etc/rc.d/init.d。實際上無論init.d放在什麼地方,它都發揮着相同的作用。(本文講的是在Ubuntu14.04系統下)

2、init.d目錄的作用

前邊提到,init.d目錄包含許多系統各種服務的啓動和停止腳本。它控制着所有從acpid到x11-common的各種事務。當然,init.d遠遠沒有這麼簡單。(譯者注:acpid 是linux操作系統新型電源管理標準 ;X11也叫做X Window系統,X Window系統 (X11或X)是一種位圖顯示的 視窗系統 。它是在 Unix 和 類Unix 操作系統 ,以及 OpenVMS 上建立圖形用戶界面 的標準工具包和協議,並可用於幾乎已有的現代操作系統)。

爲了能夠使用init.d目錄下的腳本,你需要有root權限或sudo權限。每個腳本都將被作爲一個命令運行,該命令的結構大致如下所示:

 /etc/init.d/command 選項

comand是實際運行的命令,選項可以有如下幾種:

start
stop
reload
restart
force-reload

你希望能在不使用kill 或killall 命令的情況下,能幹淨的啓動或殺死一個進程,這時/etc/init.d能夠派上用場的地方了! 例如,如果你想關閉網絡,你可以使用如下形式的命令:

/etc/init.d/networking stop

又比如,你改變了網絡設置,並且需要重啓網絡。你可以使用如下命令:

/etc/init.d/networking restart

init.d目錄下常用初始化腳本有:

networking
samba
apache2
ftpd
sshd
dovecot
mysql
nfs-kernel-server
tftpd

當然,你可能有其他更多常用的腳本,這個取決於你安裝了什麼linux操作系統。

二、rc#.d目錄

在Ubuntu系統中,當你查看/etc目錄時,你會發現許多rc#.d 形式存在的目錄(這裏#代表一個指定的初始化級別,範圍是0~6)。在這些目錄之下,包含了許多對進程進行控制的鏈接文件。這些腳本要麼以”K”開頭,要麼以”S”開頭,裏頭的東西都是指向init.d/的一些軟連接。
1、這些鏈接文件前面爲什麼會帶一個Kxx或者Sxx呢?
是這樣的,帶K的表示停止(Kill)一個服務,S表示開啓(Start)的意思
2、K和S後面帶的數字呢?幹什麼用的
這個我開始的時候還以爲是排列起來好看或者數數用呢(是不是很幼稚?)。後來發現不是的。它的作用是用來排序,就是決定這些腳本執行的順序,數值小的先執行,數值大的後執行。很多時候這些執行順序是很重要的,比如要啓動Apache服務,就必須先配置網絡接口,不然一個沒有IP的機子來啓動http服務那豈不是很搞笑。。。
3、無意中我發現同一個服務帶S的和帶K的鏈接到init.d之後是同一個腳本。我就納悶了,爲什麼會是執行同一個腳本呢?
這個時候真是S和K的妙用了,原來S和K並不止是用來看起來分的清楚而已。S給和K還分別給init.d下面的腳本傳遞了start和stop的參數。哦,是這樣的(煥然大悟的樣子,呵呵)!這時我纔想起來原來曾經無數用過的/etc/rc.d/init.d/network restart命令。原來傳S時相當於執行了/etc/rc.d/init.d/xxx start這條命令,當然K就相當於/etc/rc.d/init.d/xxx stop了。

三、/etc/rc.local腳本

rc.local也是經常使用的一個腳本。它是在系統初始化級別腳本運行之後再執行的,因此可以安全地在裏面添加你想在系統啓動之後執行的腳本。常見的情況是你可以再裏面添加nfs掛載/mount腳本。此外,你也可以在裏面添加一些調試用的腳本命令。
例如,我就碰到過這種情況:samba服務總是無法正常運行,而檢查發現,samba是在系統啓動過程中就該啓動執行的,也就是說,samba守護程序配置保證了這種功能本應該正確執行。碰到這種類似情況,一般我也懶得花大量時間去查爲什麼,我只需要簡單的在/etc/rc.local腳本里加上這麼一行:

     /etc/init.d/samba start

這樣就成功的解決了samba服務異常的問題。

四、總結

Linux是靈活的,我們總是可以找到許多不同的辦法來解決同一個問題。啓動系統服務的例子就是一個很好的佐證。有了/etc/init.d目錄下的腳本,再加上/etc/rc.local這個利器,你可以放心的確保你的服務可以完美的啓動和運行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章