Ads 468x60px

##EasyReadMore##

25 12月, 2013

如何增加 linux Daemon 系統啟動程式與指定順序

image

在你的程式加上下面的標頭檔

否則會出現

insserv: warning: script 'upgradeFw' missing LSB tags and overrides

因為要符合 LSB 規範

一份符合 LSB 規範的最精簡啟動指令稿(init script)之範例如下:

#!/bin/sh
### BEGIN INIT INFO
# Provides: scriptname
# Required-Start: $all
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: Enable service provided by daemon.
### END INIT INFO



其中由 ### BEGIN INIT INFO### END INIT INFO 這兩行所夾起的內容,皆為啟動行為之指示。其意義請參考「How to LSBize an Init Script」。




  • Provides 欄位必須指定一個可識別的名稱,一般同啟動指令稿的檔名。


    此欄位所指識別名稱,可作為其他程式排定相依關係之依據。


  • Required-Start 欄位指示此程式之前應先啟動哪個項目。換句話說就是排在哪個程式後面啟動。


    $all 是一個虛設項目,表示所有程式項目。在 Required-Start 使用,將令此程式排在最後啟動。


  • Required-Stop 欄位指示此程式應在哪個項目之前停止。換句話說就是排在哪個程式前面停止。


    此欄位可以留白。


  • Default-Start 欄位指示在哪些 run level 下要啟動此程式。一般都填 '2 3 4 5' 。


  • Default-Stop 欄位指示在哪些 run level 下要停止此程式。一般都填 '0 1 6' 。



header 好了之後下面接你的程式,因為是 daemon 要配合 start、stop、restart 所以其配置如下



case "$1" in
start)
start-stop-daemon --start --background --exec /root/proxy.py
;;
stop)
start-stop-daemon --stop --name proxy.py
esac



 



如果你的程式只是簡單的 script 不需要背景執行,則start-stop-daemon --start --background –exec 就不需要加了



接下來就在 /etc/init.d目錄放置你要的程式



用下面指令將程式註冊到開機程序 & 看看服務有沒有起來



chkconfig updateFw on ;chkconfig --list updateFw




理論上就沒問題了



# 已經設定為『開機預設啟動』了,再來觀察看看到底該服務啟動沒?



image



結果還是有問題



原來是因為測試時多加了一個 upgradefw 會與本來的 upgradeFw 衝到…



所以把 upgradefw 移除掉就好了



再試一次就成功了



image



image



成功後會將程式的檔名加入到




/etc/init.d/.depend.start




啟動優先順序:



假設現在有 A, B 兩程式要加入系統啟動程式項目中,且 B 要排在 A 之後才能啟動。那麼 A, B 兩程式的啟動指令稿將如下所示:



/etc/init.d/test-a:

指定程式識別名稱為 test-a 。




#!/bin/sh
# This is for program A.
### BEGIN INIT INFO
# Provides: test-a
# Required-Start: $syslog
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
### END INIT INFO



/etc/init.d/test-b:

因為 A 程式的啟動識別名稱為 test-a ,故此處的 Required-Start 欄位內容應填 test-a ,指示此項目要排在 test-a 之後。




#!/bin/sh
# This is for program B.
### BEGIN INIT INFO
# Provides: test-b
# Required-Start: test-a
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
### END INIT INFO



接著分別執行 insserv test-ainsserv test-b ,啟用這兩個項目。insserv -r test-a 則會移除啟動項目。



http://blog.roodo.com/rocksaying/archives/19886844.html



http://xiaoxia.org/2011/11/15/create-a-simple-linux-daemon/



http://linux.vbird.org/linux_basic/0560daemons.php#chkconfig

0 意見:

張貼留言

 
Blogger Templates