引言:Linux操作系統因其自由軟件的特性而在業界占有越來越重要的地位。但Linux也有其致命的弱點——對系統的管理工作主要通命令行的方式進行。于是,找到一個通用的切實可行的方法來輔助運維人員調試服務器,就顯得猶為重要。此時,系統日志文件便可大顯示身手了。
Linux操作系統因其自由軟件的特性而在業界占有越來越重要的地位。但Linux也有其致命的弱點——對系統的管理工作主要通命令行的方式進行,這使得它的應用比Windows麻煩得多,這可能也是制約Linux發展的一個重要因素。雖然現在有很多版本的Linux把圖形界面也做得越來越人性化,但相對于Windows而言,在Linux環境中圖形界面的應用仍是讓人覺得牽制了手腳,學習Linux的核心還是學習它的命令環境。并且,在熟練的情況下,命令行方式能提高我們的工作效率和準確度。

圖1 日志記錄
對于Linux環境下各種服務器的管理,則是通過對服務器的配置文件進行編輯來實現。Linux環境下服務器的配置文件是純文本的,配置選項又非常多,因此,在配置過程中出錯是不可避免的事。一旦配置文件出錯,在嘗試啟動服務時,除了語法問題類的錯誤之外,系統能給出的其他錯誤提示非常有限,而且有時并不是配置文件本身出錯,這樣的話,服務能正常啟動,但卻不能正常工作。這些都給系統運維帶來了很大的障礙。
當然,有些類型的服務,比如DNS,也提供了一些專門的排錯工具,但功能仍然有限且使用復雜,而且也不是所有的服務都有排錯工具。于是,找到一個通用的切實可行的方法來輔助運維人員調試服務器,就顯得猶為重要。此時,系統日志文件便可大顯示身手了。
日志文件記錄了操作系統在什么時候實施了什么操作,以及系統作出了怎么樣的反應,無論操作成功還是失敗,在日志中都能找到相應的記錄。日志文件的產生方式有兩種,一種是由操作系統產生,一種是由各自軟件自帶的日志功能產生。如圖1所示,從圖中的日志內容可以看出,5月 13日 11:04:50時,在localhost主機上,tpvmlpd2的設備類型不支持,從而知道這個設備因為系統不支持而未被啟動。
要想利用日志文件來對系統進行運維,就必須先對日志文件有個了解。在Linux環境中,常見日志文件有以下幾個。
/var/log/cron——計劃任務日志。
/var/log/dmesg——內核檢測過程中產生的信息。
/var/log/lastlog——檢測所有賬號登錄信息。
/var/log/maillog或/var/log/mail/*——郵件系統信息日志。
/var/log/messages——記錄系統發生的所有錯誤信息。
/var/log/secure——安全信息日志。
/var/log/wtmp、/var/log/faillog——記錄正確登錄系統與錯誤登錄系統者的賬號信息。
/var/log/httpd/*/、var/log/news/*、/var/log/samba/*——不同網絡服務的日志信息記錄處。
在服務器運維過程中,主要運用/var/log/messages和/var/log/ httpd/*/、var/log/news/*、/var/log/samba/*等日志文件。要想讓日志文件在運維中起作用,還必須先啟動日志服務。

圖2 httpd服務無法啟動

圖3 httpd的日志文件
Linux下的日志服務主要由兩個守護進程來完成,一個是syslogd,主要控制系統與網絡等服務的日志記錄的信息;一個是klogd,主要控制內核產生的各種問題的日志。用Service syslog start命令即可開啟日志服務,syslog服務開啟后,它的兩個守護進程都處于運行中。同時,還應該用命令chckfig syslog on來讓服務每次開機時都處于運行狀態。
下面,我們以Apache服務實例來看看如何利用日志文件來實現服務器的運維。
已經在系統中安裝了Apache服務器的相關軟件包,并且對/etc/httpd/conf/httpd.conf配置文件進行了基本設置,但在啟動或重啟服務器的時候 卻 出 現“FAILED”,即啟動錯誤,并且系統沒有給出任何提示信息(如圖2)。
此時,要想通過查閱配置文件去進行錯誤修正,無異于大海撈針,而且絲毫沒有頭緒。但是,如果借助日志文件來判斷故障點便顯得很輕松了。用任何的文本編輯工具都可打開/var/log/httpd日志文件進行分析,但最好利用tail命令來打開為宜。因為任何一個日志往往包含很多條目,把所有的條目都逞現出來不便于日志分析,而tail命令默認只把日志的最后十條顯示出來,以利于觀察日志的最新情況(如圖 3)。
從日志文件可以看出,系統的SElinux策略是打開的,并且提示httpd服務的主目錄/var/www/html中的某些文件未找到或權限不夠等,而實際上這個文件確實存在于目錄中。下面我們就從分析主目錄的SELinux策略著手。
用ls-Z/var/www/html命令來查看該目錄下文件的SELinux策略,結果如圖4所示。
可以看出,默認首頁index.html的SELinux策略屬性為user_home_t,而需要httpd進程能訪問則相應的文件及目錄必須要是“httpd_user_content_t”或httpd_sys_conten_t屬性才行(關于SELinux的策略不是本文要討論的范疇)。

圖4 目錄/var/www/html的SELinux策略
清楚故障原因后,解決方案就有了。根據復雜程度的不同,可以有以下兩種解決方案。一是,通過命令chcon -R -t httpd_sys_content_t /var/www/html來修改httpd進程相關文件及目錄的屬性。用這種解決方案需要對SELinux策略有一定的認識才行。另一種解決方案比較簡單直接,直接用命令/usr/sbin/setenforce 0來關閉SELinux功能,這種解決方案雖然簡單,但會降低系統的安全性。
無論用上面哪種方式清除故障后,再用命令service httpd start,則httpd又能重新啟動,Web服務器又能重新正常工作了。
上例只是日志文件在服務器運維中應用的一個代表,但由此可以看出,當啟動服務時,系統無法給出足夠的信息讓我們進行服務器運行的故障排除時,藏在系統背后的日志文件可以讓運維者找到出路。