自己动手添加一个OpenWrt开机启动脚本

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/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流程,之后重复启动和退出。

最后失效了

1
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

posted @   HiLuf  阅读(5873)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!
点击右上角即可分享
微信分享提示
*
*