Linux程序託管與守護程序設定

2022-04-30 15:45:16 字數 3218 閱讀 4661

引言

利用init進行程序託管

系統啟動時,init程式根據/etc/inittab檔案的配置,拉起系統服務、getty登陸終端,自定義的程序同樣也可交由init程式管理。

最簡單的方法,是在/etc/inittab檔案中新增一條語句:

zz:2345:respawn:/tmp/lx/test_init
該語句含義為:

id: inittab檔案中條目的唯一標識,這裡為zz

runlevels: 列出指定命令或程序的執行級,這裡指示/tmp/lx/test_init程式在2、3、4和5級別執行

action: 描述init對程序進行何種方式託管,respawn指該程序只要中止就立即重新啟動

process: 要執行的程序,這裡為/tmp/lx/test_init

對/etc/inittab檔案修改過後,我們可傳送hup訊號量給init程序,讓修改生效:

#kill  -hup  1
以上命令執行完之後,就可以查到我們自定義的程式咯:

ser       pid %cpu %mem    vsz   rss tty      stat start   time command root      3783  0.0  0.0   3832   600 ?        ss   mar27   0:00 /tmp/lx/test_init

init是否能像我們設定的那樣對自定義程序進行管理呢?kill掉以上程序再檢驗一下吧!

這時,在一旁掃地的阿姨瞄了一眼螢幕,不經意地說:停止程序就這麼不方便,假如我還要重啟程序、查詢程序狀態、修改程序執行級別呢?

守護程序設定

為更方便地對自定義程序進行起停、查詢等操作,我們可將自定義程序設定為守護程序,並利用service等工具進行程序管理工作。下面我們來看守護程序的設定方法。

首先,和系統自帶的守護程序一樣,在/etc/init.d目錄下需要有乙個與自定義守護程序相對應的指令碼檔案(init script),該指令碼包含以下內容。

說明資訊(init info):

# /etc/init.d/test_daemon ### begin init info # provides:           test_daemon # required-start:     $local_fs  # should-start:  # required-stop:  # should-stop:  # default-start:      2 3 5 # default-stop:       0 1 2 6 # description:        test_daemon writes a message to /tmp/lx/test.log every 10 seconds,

#                     showing that the daemon is alive.
### end init info
守護程序的說明資訊格式固定,其指明守護程序依賴的服務、啟動/關閉的執行級別等資訊。

程序開啟(start)、退出(stop)、狀態查詢(status)等動作對應的指令碼:

test_bin=/usr/sbin/test_daemon case "$1" in start) echo -n "starting test_daemon " /sbin/startproc $test_bin rc_status -v ;; stop) echo -n "shutting down test_daemon " /sbin/killproc -term $test_bin rc_status -v ;;

以上指令碼呼叫了startproc、killproc工具對守護程序的起停進行控制。

#chmod 744 /etc/init.d/test_daemon #insserv /etc/init.d/test_daemon
insserv工具會根據守護程序init script中"init info"的依賴資訊,決定系統啟動時,自定義守護程序與已有守護程序的相對啟動順序:

#ll /etc/init.d/rc5.d/*test lrwxrwxrwx 1 root root 7 mar 29 01:02 /etc/init.d/rc5.d/k01test_daemon -> ../test_daemon lrwxrwxrwx 1 root root 7 mar 29 01:02 /etc/init.d/rc5.d/s01test_daemon -> ../test_daemon

完成以上步驟,在系統重啟後,程序test_daemon就會自動啟動。我們可以使用命令對該程序進行起停:

#/etc/init.d/test_daemon start starting test_daemon                   done #/etc/init.d/test_daemon status checking for service test_daemon       running #/etc/init.d/test_daemon stop shutting down test_daemon              done

service工具可對/etc/init.d目錄下的系統服務進行管理,也可以使用它完成與以上相同的操作:

#service test_daemon start #service test_daemon status #service test_daemon stop
另外,我們還可以使用chkconfig工具對test_daemon的啟動級別進行查詢和設定:

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

小結

本文介紹了兩種新增自定義後台程序的方法。將程序交由init託管,當程序退出時可被init重新拉起,設定方法簡單,但不方便對程序進行管理;以init script的方式將程序設定為系統服務項,利用系統已有的服務項管理工具service、chkconfig,能方便地對程序進行管理。

linux程序系列 6 守護程序與孤兒程序

守護程序是生存期長的一種程序,它們常常在系統引導裝入時啟動,系統關閉時終止。守護程序有如下幾個特點 1.所有的守護程序都是以超級使用者 使用者id為0的root使用者 的優先權執行 2.守護程序沒有控制終端,一直在後台執行 3.守護程序的父程序都是init程序 1號程序 什麼是孤兒程序呢?父程序結束...

Linux守護程序

linux下守護程序一般分為5步,但是實際上只有前兩步是關鍵。第一步 建立子程序,關閉父程序。使用fork 建立,父程序exit 退出。關鍵第二步 建立新的會話id,setsid 作用是使子程序擺脫原有的會話 程序組 終端的控制,其實,linux下每個程序都是由一號程序建立而來的,每個程序都是1號程...

Linux 守護程序

守護程序daemon,是生存期較長的一種程序,名字一般以字母d結尾。它們常常在系統自舉時啟動,僅在系統關閉時才終止。因為它們沒有控制終端,所以說它們是在後台執行的。linux系統有很多守護程序,它們執行日常事務活動。自舉只有兩個功能 加電自檢和磁碟引導。加電自檢 當我們按下計算機電源開關時,頭幾秒鐘...