【buildroot】初始化脚本后台运行, 解决启动时间过长

在使用buildroot勾选组件时, 在生成文件系统时会增加组件的初始化脚本.

由于初始化脚本是在登陆前运行的, 某些初始化脚本过慢导致登陆时间过长, 影响体验

初始化运行流程

#!/bin/sh
# Start all init scripts in /etc/init.d
# executing them in numerical order.
#
for i in /etc/init.d/S??* ;do

     # Ignore dangling symlinks (if any).
     [ ! -f "$i" ] && continue

     case "$i" in
	*.sh)
	    # Source shell script for speed.
	    (
		trap - INT QUIT TSTP
		set start
		. $i
	    )
	    ;;
	*)
	    # No sh extension, so fork subprocess.
	    $i start
	    ;;
    esac
done
Created with Raphaël 2.2.0 /etc/init.d/rcS 循环查找/etc/inid.d/的文件 前台运行

添加循环条件, 指定后台运行

  • /etc/init.d/中, 在想要后台运行的脚本文件名后添加-bg后缀, 例如S50sshd-bg
  • 修改/etc/init.d/rcS文件, 添加条件, 当有-bg后缀则转入后台运行
for i in /etc/init.d/S??* ;do

     # Ignore dangling symlinks (if any).
     [ ! -f "$i" ] && continue


#!/bin/sh
# Start all init scripts in /etc/init.d
# executing them in numerical order.
#
for i in /etc/init.d/S??* ;do

     # Ignore dangling symlinks (if any).
     [ ! -f "$i" ] && continue

     case "$i" in
# 新增代码段-------------------开始
    *-bg)
        (
            echo $i "run it background"
            trap - INT QUIT TSTP
            . $i start &
        )
        ;;
# 新增代码段-------------------终止
	*.sh)
	    # Source shell script for speed.
	    (
		trap - INT QUIT TSTP
		set start
		. $i
	    )
	    ;;
	*)
	    # No sh extension, so fork subprocess.
	    $i start
	    ;;
    esac
done

修改后的流程如下

Created with Raphaël 2.2.0 /etc/init.d/rcS 循环查找/etc/inid.d/的文件 -bg后缀 后台执行 前台执行 yes no
### 配置 OpenWRT 软件实现开机自启动 为了使应用程序能够在OpenWRT设备上随系统启动而自动运行,需遵循特定的方法来创建并配置相应的初始化脚本。 #### 创建启动脚本 在`/etc/init.d/`目录下新建一个用于控制应用生命周期的Shell脚本文件。此脚本应采用Procd框架编写以兼容OpenWRT环境下的进程管理机制[^3]。下面是一个简单的模板: ```bash #!/bin/sh /etc/rc.common USE_PROCD=1 START=90 STOP=10 start_service() { procd_open_instance procd_set_param command "/path/to/application" procd_close_instance } ``` 上述代码片段展示了如何构建一个基本的服务启动器,其中设置了服务优先级(`START`)以及停止顺序(`STOP`)参数;通过调用procd接口完成实际命令执行逻辑封装。 #### 启用与禁用服务 一旦完成了启动脚本的撰写工作之后,则需要将其链接至`/etc/rc.d/`路径以便于被识别为有效的开机加载项之一。这一步骤可通过内置工具`enable`和`disable`操作轻松达成: - 若要激活某项服务使之成为默认开启状态,在终端输入如下指令即可:`/etc/init.d/<script_name> enable` - 反之如果希望移除某个已存在的自启项目,则可以利用相应名称替换掉占位符后加上`disable`关键字来进行处理。 当成功添加了一个新的后台守护进程以后,记得重启路由器让更改生效或者手动触发一次即时性的加载过程(`/etc/init.d/<script_name> start`)。 #### 编译集成(针对源码开发) 对于那些正在参与固件定制工作的开发者而言,还可以考虑直接将自制的应用程序加入到官方buildroot体系当中去。具体做法涉及修改package定义部分的内容,并按照既定流程编译整个镜像包[^4]。这样做不仅能够简化部署环节中的诸多琐事,而且有助于保持系统的整洁性和一致性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值