使用procd執行進程

在openwrt系統內init進程被procd取代,procd做爲父進程能夠監控子進程的狀態。一旦子進程退出後便可在某一個時刻嘗試進行重啓進程。在op系統內使用procd監控的有uhttpd,netifd等。在/etc/init.d/文件夾內帶有USE_PROCD=1標誌,下面就介紹如何讓procd啓動某一個應用程序 個人應用程序名是binloader, 直接上腳本代碼服務器

!/bin/sh /etc/rc.common
Copyright (C) 2008 OpenWrt.org
START=98
執行的順序,按照字符串順序排序並非數字排序
USE_PROCD=1
使用procd啓動
BINLOADER_BIN="/usr/bin/binloader"
start_service() {
procd_open_instance
#建立一個實例, 在procd看來一個應用程序能夠多個實例
#ubus call service list 能夠查看實例
procd_set_param respawn
#定義respawn參數,告知procd當binloader程序退出後嘗試進行重啓
procd_set_param command "$BINLOADER_BIN"
binloader執行的命令是"/usr/bin/binloader", 若後面有參數能夠直接在後面加上

procd_close_instance
#關閉實例
}
start_service 函數必需要從新定義
stop_service() {
rm -f /var/run/binloader.pid
}
stop_service從新定義,退出服務器後須要作的操做
restart() {
stop
start
}

必須指出來的是,被procd執行的程序不能是daemon後臺程序,由於後臺程序的主進程退出後在procd看來就是程序退出了,而後會進入respawn流程,以後重複啓動和退出。
最後失效了
procd: Instance binloader::instance1 s in a crash loop 6 crashes, 0 seconds since last crash
原文:http://m.blog.csdn.net/liangdsing/article/details/53906445ide

相關文章
相關標籤/搜索