當前位置:編程學習大全網 - 源碼下載 - 如何基於procd編寫init腳本

如何基於procd編寫init腳本

procd init腳本有點類似於原始的init腳本,但是主要的區別是procd期望服務在前臺運行。

作為現有的腳本,必須以sh /etc/rc.common開頭,為了兼容還需要“USE_PROCD=1”這壹行。

#!/bin/sh /etc/rc.common

USE_PROCD=1

要啟動壹個服務,我們需要壹個函數‘start _ service’,stop_service函數是可選的,只有當妳停止服務的時候需要做壹些事情的時候。Stop_service()在procd終止該服務後被調用。服務本身應該在前臺運行。(顯然

start_service() {

procd_open_instance

procd_set_param命令/sbin/your _ service _ daemon-b-a-foo

procd_set_param respawn # respawn自動如果有東西死了,小心妳有沒有替代的流程主管

procd _ set _ param env SOME _ VARIABLE = fun times #將環境變量傳遞給進程

procd _ set _ param limits core = " unlimited " #如果您需要為您的進程設置ulimit

如果這些文件已經更改,procd _ set _ param file/var/etc/your _ service . conf #/etc/init . d/your _ service reload將重新啟動守護程序

procd_set_param netdev dev #同樣,除非dev的ifindex發生變化。

procd_set_param數據名稱=值...#同樣,除非該數據發生變化。

procd_close_instance

}

TODO:表舊openwrt initscript?新過程

有關盡可能多的可用信息,請參見procd.sh頂部的文檔

配置文件/網絡接口更改時觸發Procd

在舊版本的OpenWrt中,壹個名為“ucitrack”的系統試圖跟蹤UCI配置文件,以及依賴於每個文件的進程,並在需要時重啟它們。這也被ubus/procd所取代,並擴展到允許在網絡接口改變時通知服務。這對於諸如dnsmasq和代理/路由軟件之類的服務很有用,這些服務關心哪些網絡接口正在使用,以及使用什麽配置。

首先,為了簡單地使您的服務依賴於壹個配置文件,向您的init腳本添加壹個“service_triggers()”子句

服務觸發器()

{

procd _ add _ reload _ trigger " UCI-file-name "

}

這將設置掛鉤,以便發出' reload_config '將發出對'/etc/init . d/& lt;yourinitscript & gt當“/etc/config/uci-file-name”的md5sums更改時,重新加載。您可以編輯任意多的配置文件,然後發出reload_config,procd將負責重新加載所有文件。註意,配置文件沒有改變,沒有重新加載。如果要顯式重裝,還是需要發出'/etc/init . d/& lt;您的服務& gt手動重新加載。

默認情況下,“reload”將導致停止/啟動調用,除非您在init腳本中明確提供了“reload()”調用。(目前,r41147)不支持獲取procd服務的PID,或者在重載例程中向該服務發送信號,但是應該很快就可以實現。

重新加載()

{

服務_重新加載

printf "服務在%s" "$(日期)重新加載" & gt& gt/tmp/somefile

}

如果您希望/需要您的服務依賴於網絡的變化,只需修改您的service_triggers部分,如下所示..

服務觸發器()

{

procd _ add _ reload _ trigger " UCI-file-name " " second-UCI-file "

procd _ add _ network _ trigger " LAN " | " etho 0 " FIXME-這仍然是壹項正在進行的工作....

}

igmpproxy是(目前)唯壹利用這壹點的服務,但是(希望)當妳讀到這篇文章時,dnsmasq至少也已經更新了。

  • 上一篇:付費社區源代碼
  • 下一篇:超級計算機使用什麽操作系統?
  • copyright 2024編程學習大全網