设置开机启动原理

/etc/init.d 目录下面就是系统加载的开机配置
每个配置可以设置 start 优先级,数字越大启动越靠后,如果有很多需要依赖网络或者 USB 之类的启动程序最好设置靠后一些,等其他程序启动了再启动。

系统读取 etc/init.d/ 下的启动配置文件后,系统会根据 start 优先级,按照顺序执行每个文件的 start() 函数中的命令。

下面为 ddns-go 添加开启启动,ddns-go 的路径是/usr/local/bin/ddns-go

在 openwrt 系统内 init 进程被 procd 取代,procd 作为父进程可以监控子进程的状态。一旦子进程退出后即可在某一个时刻尝试进行重启进程。在 op 系统内使用 procd 监控的有 uhttpd, netifd 等。在 /etc/init.d/ 文件夹内带有 USE_PROCD=1 标志,下面就介绍如何让 procd 启动某一个应用程序

编辑

vi /etc/init.d/ddns-go

输入以下内容

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

START=99

# 使用 procd 启动
USE_PROCD=1

start_service(){
    procd_open_instance
    #创建一个实例, 在procd看来一个应用程序可以多个实例
    #ubus call service list 可以查看实例

    procd_set_param respawn
    #定义respawn参数,告知procd当ddns-go程序退出后尝试进行重启

    procd_set_param command "/usr/local/bin/ddns-go"
    # ddns-go 执行的命令是 "/usr/local/bin/ddns-go", 若后面有参数可以直接在后面加上

    procd_close_instance
    #关闭实例
}

stop_service(){
    rm -f /var/run/ddns-go.pid
}

restart(){
    stop
    start
}

保存退出

chmod -R 777 /etc/init.d/ddns-go # 设置权限,否则无法激活开机启动,提示权限不足
/etc/init.d/ddns-go enable # 激活开机启动
/etc/init.d/ddns-go start # 运行 start 函数启动程序
必须指出来的是,被 procd 执行的程序不能是 daemon 后台程序,因为后台程序的主进程退出后在 procd 看来就是程序退出了,然后会进入 respawn 流程,之后重复启动和退出。

ddns-go: https://github.com/jeessy2/ddns-go

标签: ddns, openwrt

添加新评论