Linux進程託管與守護進程設置

引言javascript

在上一篇《Linux啓動之旅》中,咱們瞭解了Linux啓動過程,在該過程的最後一步,init進程拉起/etc/init.d/rcN.d/目錄下指定的守護進程(daemon)。倘若自定義的一個進程也須要隨開機自啓動,並隨系統一直運行,咱們能夠怎麼設置呢?html

 

利用init進行進程託管java

系統啓動時,init程序根據/etc/inittab文件的配置,拉起系統服務、getty登錄終端,自定義的進程一樣也可交由init程序管理。git

最簡單的方法,是在/etc/inittab文件中添加一條語句:github

zz:2345:respawn:/tmp/lx/test_init

該語句含義爲:ide

id: inittab文件中條目的惟一標識,這裏爲zz工具

runlevels: 列出指定命令或進程的運行級,這裏指示/tmp/lx/test_init程序在二、三、4和5級別運行ui

action: 描述init對進程進行何種方式託管,respawn指該進程只要停止就當即從新啓動this

process: 要執行的進程,這裏爲/tmp/lx/test_initspa

 

對/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掉以上進程再檢驗一下吧!

 

這種設定自啓動、長久執行進程的方式十分簡單,所要作的就是把程序準備好,再在/etc/inittab文件裏添加一條語句便可。可是,若是要把進程停掉,咱們須要這麼作:修改/etc/inittab文件,在對應條目開頭加上註釋,而後發送SIGHUP信號讓init進程從新加載/etc/inittab配置文件。

 

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

 

守護進程設置

爲更方便地對自定義進程進行起停、查詢等操做,咱們可將自定義進程設置爲守護進程,並利用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工具對守護進程的起停進行控制。

 

最後,正確設置腳本權限,並使用insserv工具生成/etc/init.d/rcN.d目錄下相應連接:

#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,能方便地對進程進行管理。

 

本文中使用的自定義進程代碼和相關腳本可從這裏下載。

相關文章
相關標籤/搜索