引言
利用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_initinit是否能像我們設定的那樣對自定義程序進行管理呢?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_daemoninsserv工具會根據守護程序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 doneservice工具可對/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系統有很多守護程序,它們執行日常事務活動。自舉只有兩個功能 加電自檢和磁碟引導。加電自檢 當我們按下計算機電源開關時,頭幾秒鐘...