https://wiki.openwrt.org/doc/techref/procd
Procd:Openwrt的進程管理守護進程(process management daemon),它與初始化腳本(/etc/init.d/*)保持聯系,當進程相關聯的配置文件更改時,會觸發procd去重啟或啟動腳本。Procd代替了原本的Hotplug2。
備注:
Hotplug2執行位於/etc/hotplug.d目錄下的腳本。每次接口up或down,都會調用/etc/hotplug.d/iface/目錄下的所有腳本,以字母順序調用。為了遍歷,將每個腳本前面加入數字前綴。這就是為什么腳本名字會像這樣:10-route, 20-firewall。
如何寫一個procd調用的初始化(init)腳本
1、要以下面開頭:
#!/bin/sh /etc/rc.common
USE_PROCD=1
2、腳本中需要包含啟動進程使用的函數 start_service() 和 停用進程的函數 stop_service() 。
增加觸發Procd的
1、在init腳本中增加 service_triggers() 函數。
service_triggers()
{
procd_add_reload_trigger “uci-file-name”
}
其中uci-file-name 對應 /etc/config下面的配置文件。
procd_add_reload_trigger 函數在 procd.sh 腳本中。
2、重新加載更改后的配置文件,調用函數reload_service()
reload_service()
{
echo “Explicitly restarting service, are you sure you need this ?”
stop
start
}
Init 腳本如何起作用
所有的參數都被封裝進json,通過ubus傳送到procd。
調試
設置 PROCD_DEBUG=1后,可以查看到(procd 調用init腳本時)更多的調試信息。