openwrt 应用后台运行、开机自启动,一次安装永久启动
openwrt 的自启动和 Linux 差不多,下面简单讲讲
后台运行
实际上要一个应用后台运行,在输入命令的时候加上 “&” 符号就可以了,向下面
helloworld &
开启自启动
开机自启动这好像还是挺多方法的,一个是在 /etc/init.d目录编写文件,一个是在网页上的开机运行脚本上加上上面后台运行的命令。
编写自启动脚本
在 openwrt 开发板命令行中输入
vi /etc/init.d/mystart
里面输入如下内容:
#!/bin/sh /etc/rc.common
START=99
STOP=15
start(){
echo start helloword
helloword &
}
stop(){
echo stop helloword
}
restart(){
echo restart helloword
}
enable(){
echo enable helloword
}
disable(){
echo disable helloword
}
命令应该很好理解,前面 START 和 STOP 是启动和关闭的优先级。
下面是另一种自启动脚本的写法,应该是差不多,注释写的也挺清楚了
#!/bin/sh /etc/rc.common
START=99 # 执行的顺序,按照字符串顺序排序并不是数字排序
STOP=15
SERVICE=helloword
PROG=/bin/helloword
USE_PROCD=1 # 使用procd启动
# start_service 函数必须要重新定义
start_service()
{
echo service helloword start
procd_open_instance # 创建一个实例, 在 procd 看来一个应用程序可以多个实例
# ubus call service list 可以查看实例
procd_set_param command $PROG # mycode执行的命令是"/app/mycode", 若后面有参数可以直接在后面加上
procd_set_param respawn # 定义respawn参数,告知procd当mycode程序退出后尝试进行重启
# procd_close_instance # 关闭实例
}
编写完文件后还应该记得改一下权限,让脚本能够执行
cd /etc
chmod -R 777 init.d/mystart #设置权限,否则无法激活开机启动,提示权限不足
使用的时候按下面输入命令就可以,和普通服务类似
/etc/init.d/mystart enable #激活开机启动
/etc/init.d/mystart start #运行start函数启动程序
在网页上配置自启动
由于这项目是上一家公司的时候开发的了,都快一年了,源码都在之前公司的笔记本电脑里面,自己电脑没源码,就简单讲讲。
先要打开 openwrt 的网页控制界面,里面找到自启动功能,在里面的文本行中加入下面命令
helloword &
实际上使用起来,好像在网页上配置的自启动还好一些,用配置文件写的但是还总出错,当时是对4G上网模块有影响,具体记不清了。当时分析出错的原因是,用配置文件写的命令在软件被停止后会尝试重新启动,当然如果你没遇到这些问题,两种方法都是可以的。
自启动进阶
网上的博客一般到这里就完了,可是我当时不想做差不多先生,我将自启动脚本写到我们的源码文件中去,在安装的时候就给自动弄好,简单省事,下面看看写法。
- 先编写配置文件
这里再源码目录总编写我们的自启动脚本文件,以上一篇的 helloword 为例
mkdir ~/openwrt/package/hellworld/auto
cd ~/openwrt/package/hellworld/auto
这里新起了一个目录来存放我们的配置文件,内容和上面一样,不说了。
接下来的重点是编写外层的 Makefile 文件,在复制那一段将我们的配置文件复制到 /etc/init.d/ 目录中去
define Package/helloword /install
echo "Here is Package/install"
$(INSTALL_DIR) $(1)/bin $(1)/etc/init.d/
$(INSTALL_BIN) $(PKG_BUILD_DIR)/helloword $(1)/bin/
$(INSTALL_BIN) ./auto/mystart $(1)/etc/init.d/
endef
注意这里的 $(INSTALL_BIN),复制的是二进制文件,权限问题我忘了,如果启动不了,也还是按上面的方法增加运行权限吧。
结语
到这里应该把我脑子里记得的东西讲的差不多了。
end
完美撒花
更多推荐
所有评论(0)