自己動手添加一個OpenWrt開機啟動腳本


在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

  


————————————————
原文鏈接:https://blog.csdn.net/liangdsing/java/article/details/53906445


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM