linux下的守護程序和系統日誌

2021-10-03 09:09:39 字數 3740 閱讀 6759

unix/linux中的守護程序(daemon)類似於windows中的後台服務程序,一直在後台長時間執行的程序。它通常在系統啟動後就執行,沒有控制終端,也無法和前台的使用者互動,在系統關閉時才結束。daemon程式一般都作為服務程式使用,等待客戶端程式與它通訊。我們也把執行的daemon程式稱作守護程序。比如的網路服務程式,可以在完成建立套介面,繫結套介面,設定套介面為監聽模式後,變成守護程序進入後台執行而不占用控制終端,這是網路服務程式的常用模式。unix下的網路服務程式,如webserver(nginx、apache等),ftp(vsftp),ssh(openssh)等一般都是由守護程序(daemon)來實現的。守護程序不占用終端,在後台執行。unix的守護程序一般都命名為 *d 的形式,如httpd,vsftpd,sshd等。守護程序一旦脫離了終端,退出就成了問題,這時需要使用 ps 命令查出程序id然後再使用kill命令停止。

linux系統專門提供了乙個用來建立daemon程序的庫函式,該函式的原型是:

#inlude 

intdaemon

(int nochdir,

int noclose)

;

其中引數 nochdir 指定是否要切換當前工作路徑到"/「根目錄,而引數noclose 指定是否要關閉標準輸入、標準輸出和標準出錯(即重定向到/dev/null)。在建立守護程序的時候,往往需要將程序的工作目錄修改為」/"根目錄,並將標準輸入、標準輸出和標準出錯關閉。所以這兩個引數我們一般都是傳0。

syslog是一種工業標準的協議,可用來記錄裝置的日誌。在unix系統,路由器、交換機等網路裝置中,系統日誌(system log)記錄系統中任何時間發生的大小事件。管理者可以通過檢視系統記錄,隨時掌握系統狀況。unix的系統日誌是通過syslogd這個程序記錄系統有關事件記錄,也可以記錄應用程式運作事件。通過適當的配置,我們還可以實現執行syslog協議的機器間通訊,通過分析這些網路行為日誌,藉以追蹤掌握與裝置和網路有關的狀況。

下面我們介紹一下linux系統自帶的日誌系統 syslog 函式:

一、openlog函式

#include

void

openlog

(const

char

*ident,

int option,

int facility)

函式說明:開啟日誌裝置,以供讀取和寫入.

引數說明:

1、ident:是乙個標記,ident 所表示的字串將固定的加在每行日誌的前面一標識這個日誌,通常就寫成當前程式的名稱以

作標記。

2、option:指定openlog函式和接下來呼叫的syslog函式的控制標誌。

opion

說明log_cons

如果將資訊傳送給 syslogd 守護程序時發生錯誤,直接將相關資訊輸出到終端

log_ndelay

立即開啟與系統日誌的連線(通常情況下,只有在產生第一條日誌資訊的情況下才會開啟與日誌系統的連線)

log_odelay

類似於 log_ndelay 引數,與系統日誌的連線只有在 syslog 函式呼叫時才會建立

log_perror

在將資訊寫入日誌的同時,將資訊傳送到標準錯誤輸出

log_pid

每條日誌資訊中都包含程序號

3、facility:指定記錄訊息程式的型別,與 syslogd 守護程序的配置檔案 syslog.conf 中的 facility 對應。

facility

說明log_auth

認證系統(login、su、getty等)

log_authpriv

同 log_auth 但只登陸到所選擇的單個使用者可讀的檔案中。

log_cron

cron 守護程序

log_daemon

其他系統守護程序,如 routed

log_ftp

檔案傳輸協議:ftpd、tftpd

log_kern

核心產生的訊息

log_lpr

系統印表機緩衝池:lpr、lpd

log_mail

電子郵件系統

log_news

網路新聞系統

log_syslog

由 syslogd(8)產生的內部訊息

log_user

隨機使用者程序產生的訊息

log_uucp

uucp子系統

log_local0~log_local7

本地使用保留

二、syslog函式

void

syslog

(int priority,

const

char

*format,..

.);

函式說明:寫入日誌,與檔案系統呼叫 printf使用方法類似,但在前面指定日誌級別。

引數說明:

priority:表示訊息的級別,與 syslogd 守護程序的配置檔案 syslog.conf 中的 level 對應。

log_emerg

緊急情況

log_alert

應該被立即改正的問題,如系統資料庫破壞

log_crit

重要情況,如硬碟錯誤

log_err

錯誤log_warning

警告資訊

log_notice

不是錯誤情況,但是可能需要處理

log_info

情報錯誤

log_debug

包含情報的資訊,通常指在除錯乙個程式時使用

三、closelog函式

void

closelog

(void

);

函式說明:關閉日誌裝置,與檔案系統呼叫的close類似;呼叫closelog也是可選擇的,它只是關閉被用於與syslog守護程序通訊的描述

符。

1#include 

2 #include

3 #include

4 #include

5 #include

6 #include

7 #include 89

intmain

(int argc,

char

**ar**)

1018

openlog

("daemon"

, log_cons | log_pid,0)

;//開啟日誌系統,以供讀取和寫入.

19syslog

(log_notice,

"program '%s'start running\n"

, progname);20

syslog

(log_emerg,

"program '%s' running with a emergency message\n"

, progname );21

while(1

)2226closelog()

;//關閉日誌系統

2728

return0;

29}

注意:所有程式(包括linux核心) 呼叫syslog()函式的輸出相關資訊都會記錄到 /var/log/messages 日誌檔案中,因為該檔案中記錄了所有的資訊,這也意味著當前程式記錄的訊息容易被別的程式沖刷掉,所以我們在做專案寫網路程式的時候,一般會使用標準檔案io庫(fopen、fwrite()等)自己實現日誌系統,而不是直接呼叫該函式。

linux下的守護程序

守護程序特點 1 生存期長,在系統自舉的時候啟動,僅在系統關閉時終止。2 沒有控制終端,所以說他們是在後台執行的。關於編寫守護程序程式時要遵守的一些基本規則 1 呼叫umask將檔案模式建立遮蔽字設定為0。防止由繼承得來的檔案模式建立遮蔽字可能會拒絕設定某些許可權 2 呼叫fork 然後使得父程序退...

linux下的守護程序

linux下的常駐程序的作用不可忽略,但這裡面的問題也不能忽略,怎麼啟動程序,怎麼結束程序,怎麼在程序掛掉之後重啟程序都要設計的合理。下面看乙個shell控制的php常駐程序的例子。不廢話,直接撈乾貨,上 通過 來講解更容易理解 複製 如下 bin sh filename test.sh 絕對定位該...

Linux 系統 守護程序

吳巨集東 記於2018年07月11日 部落格 守護程序 daemon 是指linux系統上各種執行在後台提供各種服務的程序 系統初始化程序演變是由sysvinit到rhel centos6的upstart再到現在rhel centos7的systemd 管理主要是通過命令systemctl來顯示 啟...