Linux 核心級系統服務

來源:互聯網
上載者:User

只要是Linux系統,不管使用的發行版本、網路設定以及系統全域設計有什麼不同,都有如下幾個核心系統服務:init、inetd、syslogd和cron。這些服務提供的功能比較簡單,但同時它們也是其他動作的基礎。如果沒有它們,Linux就不會有現在的威力。

本文將對每一個核心系統服務、相應的設定檔以及推薦的應用方式(如果有的話)逐個進行介紹。我們強烈推薦:務必要花上一些時間熟悉這些服務的實現原理。通過使用這些服務,人們已經設計出了許多富有創意的問題解決方案。

init服務

init進程是所有進程的發起者和控制者。因為在任何基於Unix的系統(比如Linux)中,它都是第一個啟動並執行進程,所以init進程的編號(Process ID,PID)永遠是1。如果init出現了問題,系統的其餘部分也就隨之而垮掉了。

init進程有兩個作用。第一個作用是扮演終結父進程的角色。因為init進程永遠不會被終止,所以系統總是可以確信它的存在,並在必要的時候以它為參照。如果某個進程在它衍生出來的全部子進程結束之前被終止,就會出現必須以init為參照的情況。此時那些失去了父進程的子進程就都會以init作為它們的父進程。快速執行一下ps -af 命令,可以列出許多父進程ID(Parent Process ID,PPID)為1的進程來。

init的第二個角色是在進入某個特定的運行層級(Runlevel)時運行相應的程式,以此對各種運行層級進行管理。它的這個作用是由/etc/inittab檔案定義的。

1. /etc/inittab檔案

/etc/inittab檔案中包括了所有init啟動運行層級所必須的資訊。這個檔案中的每一行語句的格式如下所示:

id : runlevels: action : process

注意:以#開始的語句是備註陳述式。看看你自己的/etc/inittab檔案就可以發現其中充斥了大量的備註陳述式。如果確實需要對/etc/inittab檔案進行什麼改動(一般不會出現這種情況的),記住加上一些備註陳述式,解釋為什麼要做那些修改。

2. Telinit命令

通知init在什麼時候切換系統運行層級的神秘力量實際上就是Telinit命令。這個命令有兩個命令列參數:一個參數用來通知init準備切換過去的運行層級;另外一個是-tsec,其中的sec是在通知init之前需要等待的、以秒計算的時間。

注意:init是否真的切換運行層級是由它自己決定的。很明顯,它經常切換,否則這個命令就不會那麼有用了。在大多數Unix作業系統的具體實現(包括Linux)中,Telinit命令實際上只是一個對init程式的符號連結。基於此,許多人更喜歡使用init直接切換到他們想去的運行層級而不是使用Telinit。就個人而言,我發現使用Telinit切換運行層級更便於理解和記憶。

inetd進程

inetd程式是一個守護進程。您可能已經知道守護進程是一些特殊的程式:它們在被啟動之後,自願放棄對調用自己終端的控制權。守護進程與系統其餘部分的介面只有依靠處理序間通訊(Interprocess Communication,IPC)通道、或者依靠向系統全域性記錄檔(Log File)才能發送資料項目。

inetd的角色是作為Telnet和FTP等與網路伺服器相關的進程的“超級伺服器”。這是一個簡單的道理:並不是全部的伺服器處理序(包括那些接受新的Telnet和FTP串連的進程)都會如此頻繁地被調用,以至於必須要有一個程式隨時運行在記憶體中。因此為了避免出現可能有幾十種服務都運行在記憶體中準備被使用的情況,它們都列在inetd的設定檔/etc/inetd.conf中。而代替它們的是inetd監聽著進入的串連。這樣只需要有一個進程在記憶體中就可以了。

inetd的另外一個優點是程式員並不想把需要網路連接的進程都編寫到系統中去。inetd程式將處理網路代碼,並把進入的網路資料流作為各個進程的標準輸入(Standard-In,即Stdin)傳遞到其中。這些進程的輸出(Stdout)將會被送回串連到該進程的主機去。

注意:除非你進行中編程,否則是不需要串連到inetd的Stdin/Stdout功能上。從另一方面來說,如果有人打算編寫一個簡單的命令指令碼程式並讓它出現在網路中,就值得深入研究這個極為強大的功能。

1.etc/inetd.conf檔案

etc/inetd.conf檔案是inetd的設定檔。它的結構很簡單:每一行語句代表一種服務。服務定義語句的格式如下所示:

srvce_name sock_type protocol [no]wait user srvr_prog srvr_prog_args

2.安全性與inetd.conf檔案

你將會發現在大多數的Linux安裝中,許多服務在預設的情況下是開啟的。如果你的系統將向網際網路開放(包括通過撥號點對點通訊協定 (PPP)被連通),你想做的第一件事就會是把一切都關閉!決不要假設因為你的系統沒有對公眾進行宣傳,別人就不會找到它。從相反的方向看,尋找存在安全性攻擊隱患系統的工具軟體是既容易找到又容易使用的。

關閉服務的第一個步驟是把etc/inetd.conf檔案裡所有用不著的服務性說明語句都改為備註陳述式。

一般來說,你會發現下面的方法更容易使用:先把全部東西都改為備註陳述式(徹底關閉網路服務),再有選擇地開啟需要的服務。

在完成對etc/inetd.conf檔案的修改之後,需要向守護進程報告其設定檔已經被修改了。這是通過向該守護進程發送HUP訊號來實現的。先使用下面的命令找出inetd.conf對應的進程ID:

[ root@ford /root ] # ps auxw | grep inetd | grep -v grep

這個命令的輸出類似於下面的內容:

root 359 0.0 0.1 1232 168 ? S Jun21 0 : 00 inetd

輸出中的第二列告訴我們進程ID號(這裡就是359)。為了發送HUP訊號,我們需要使用Kill命令(把這個程式叫做Kill多少有些誤導。實際上,它只是向進程發送訊號而已。預設的情況下,它會發出請求某個程式終止啟動並執行訊號)。

下面是使用Kill命令發送HUP訊號的方法:

$ kil -1 359

應該把上面命令中的359換成從你的系統上得到的進程編號。
syslogd守護進程

在同一時間會發生許許多多的事情,而在終端視窗中中斷連線的網路服務就更是如此了。因此,提供一個記錄特殊事件和訊息的標準機制就非常有必要了。Linux使用syslogd守護進程來提供這個服務。

syslogd守護進程提供了一個對系統活動和訊息進行記錄的標準方法。許多其他種類的Unix作業系統也使用了相容的守護進程。這就提供了一個在網路中跨平台記錄的方法。在大型的網路環境裡,這更具有價值。因為在那樣的環境裡,集中收集各種記錄資料以獲得系統運轉的準確情況是很有必要的。你可以把這種記錄功能子系統比作Windows NT的SystemLogger。

syslogd儲存資料用的記錄檔案都是簡明的文字檔,一般都存放在/var/log子目錄中。每個資料項目構成一行,包括日期、時間、主機名稱、進程名、進程的PID,以及來自該進程的訊息。標準C函數庫中的一個全域性的函數提供了產生記錄訊息的簡單機制。如果不喜歡編寫程式碼,但是又想在記錄檔案中產生資料項目,可以選擇使用Logger命令。可以想象,像syslogd這樣重要的工具應該是作為開機引導命令指令碼程式的一部分來啟動的。你準備在伺服器環境中使用的任何一個Linux發行版本都已經為你設定好了。

1.調用syslogd

如果需要手動啟動syslogd,或者需要修改開機引導時啟動它的命令指令碼程式,你就必須注意syslogd的命令列參數,請大家參看有關書籍,這裡不做詳細介紹。

2./etc/syslog.conf檔案

/etc/syslog.conf檔案包含了syslogd需要啟動並執行配置資訊。這個檔案的格式有些不尋常,但是現有的預設設定檔將足以滿足使用需要了,除非你需要在特定的檔案中尋找特定的資訊,或者需要把這些資訊發送到遠程記錄電腦去。

● 記錄資訊分類

在我們掌握/etc/syslog.conf檔案格式本身之前,需要先瞭解記錄訊息是如何分類的。每個訊息都有一個功能值(Facility)和一個優先權值(Priority)。功能值告訴我們這條訊息是由哪個子系統產生的,而優先權值則告訴我們這個訊息有多重要。這兩個值由句號分隔而且都有等價的字串,從而容易記憶。

● /etc/syslog.conf檔案的格式

下面是設定檔裡各語句的格式:

facility/priority combinations separated by commas file
/process/host to log to

舉例如下:

kern.info /ver/log/kerned

syslogd還可以靈活地把記錄訊息發送到多種不同的儲存目的地去。它可以把訊息儲存為檔案、把訊息發送到FIFO隊列、發送到一組使用者、或者(在大型網站集中記錄訊息的情況下)發送到一個中心記錄主機中。為了區分這些目的地,在目的地入口使用了下面的規則:

◆ 如果儲存目的地的開始字元是斜杠字元(/),訊息將發送到某個檔案。

◆ 如果儲存目的地的開始字元是垂直字元(|),訊息將發送到某個FIFO隊列。

◆ 如果儲存目的地的開始字元是“@”字元,訊息將發送到某個主機。

cron程式允許系統中的任一使用者安排某個程式在任何日期、時間準時運行,時間可以精確到分鐘。使用cron是一個極為有效方法,可以使你的系統自動化、周期性地產生報告以及執行其它定期任務。和我們在本文中已經討論的其它服務一樣,cron是由開機引導命令指令碼程式啟動的,並且應該是已經配置好了的。對進程清單的一個快速檢查就可以看到它默默地在後台運行著。cron服務的工作原理是:每隔一分鐘喚醒一次,檢查每個使用者的Crontab檔案。這個檔案的內容是該使用者希望在某些特定時刻執行的活動清單。任何匹配當前日期和時間的活動都將被調入執行。

cron命令本身並不需要任何命令列參數,也不需要什麼訊號來表明其狀態的改變。用來編輯由cron調入執行的設定項工具是Crontab。它的原理是:驗證你是否有修改cron設定項的許可權,然後調入一個文字編輯器讓你進行修改。修改完成後,Crontab會把檔案放到正確的位置,並把你帶回到提示符下。

你是否具有適當的許可權是由Crontab通過檢查/etc/cron.allow和/etc/cron.deny這兩個檔案來決定的。不管這兩個檔案中的哪一個存在,只有當你明確地列在其中的時候才能使你的操作生效。舉例來說,如果/etc/cron.allow檔案存在,那麼只有當你的使用者名稱列在這個檔案中的時候才能允許你編輯cron資料項目。另一方面,如果/etc/cron.deny檔案存在而/etc/cron.allow檔案不存在,那麼只要你的使用者名稱沒有出現在這個檔案中,就表明允許你編輯你的cron資料項目。

Cronjobs檔案(通常即指crontab檔案)的格式如下所示: Minute Hour Day Month DayOfWeek Command,所有數值都必須是整數。

如果打算在某一欄上設定多個數值(比如:打算在早晨4 : 00、中午12 : 00和下午5 : 00三次運行同一個程式),就需要將這些時間資料用逗號在相應的欄裡分隔開,但是在該欄中不能添加任何空格。對需要在早晨4 : 00、中午12 : 00和下午5 : 00三次運行同一個程式的情況,Hour欄的資料項目應該是4、12、17。

在DayOf Week資料項目裡,數值0表示星期天、1表示星期一,以此類推,直到6表示星期六。如果某個資料項目中出現了一個星號(*)萬用字元,就表示相應欄中任意的分鐘、小時、日期、月份或者星期幾都匹配。當檔案中的日期和時間滿足當前日期和時間的時候,這一行語句中設定的命令就會以設定該資料項目使用者的身份運行,所產生的任何輸出都會以電子郵件E-mail的方式返回到那個使用者。很明顯,這可能會引起郵箱中的訊息爆滿,所以對郵件報告作出迅速反應是很重要的。對訊息量加以控制的一個好辦法是:只輸出出錯情況,而那些不可避免的其他輸出就發送到/dev/null裝置中去。

我們來看一些例子。下面的資料項目每隔四個小時運行一次/usr/bin/ping zaphod命令:

0 0,4,8,12,16,20 * * * /usr/bin/ping zaphod

下面的資料項目在每個星期五晚上的10 : 00運行程式/usr/local/scripts/backup-level-0:

0 22 * * 5 /usr/local/scripts/backup_level_0

最後,下面的資料項目在四月一日(不管那是星期幾)早晨4 : 01分發出一封電子郵件:

1 4 1 4 * /bin/mail dad@domain.com < /home/sshah/joke

本文討論了每一個Linux系統都必須具備的四種核心服務。這些服務並不要求網路支援,並且會隨著主機的不同而有不同的變化。這就使它們具有很高的使用價值,因為它們不管電腦系統本身是否在多使用者模式下都可以工作得很好。

來自:ccidnet

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.