OpenWrt启动脚本规则

在做项目过程中,时常添加一些启动脚本,但是对整个脚本的启动流程和规则缺乏理解,所以整理加深一下。

路径

etc/init.d/

etc/rc.d/

规则

#!/bin/sh 脚本解释器

/etc/rc.common 脚本执行前的检查脚本,可以检测出非法的参数

START=40 在etc/rc.d/生成S40xxx,在启动时按照数字从小到大执行

STOP=40 在etc/rc.d/生成K40xxx,在关闭时按照数字从大到小执行

boot 有boot时就不会执行start

#!/bin/sh /etc/rc.common
# Copyright (C) 2006 OpenWrt.org

START=40
STOP=40

boot() {

}

start() {

}

restart() {

}

stop() {

}

初始化

start   # 启动服务
stop    # 停止服务
restart # 重启服务
reload  # 重新载入配置文件, 如果失败则重启
enable  # 启用开机自启动
disable # 禁用开机自启动

enable 启动开机启动后会在etc/rc.d/下面建立链接文件指向etc/init.d/下面对应文件。

编译前,只在etc/init.d/下面添加了文件,编译后生成了etc/rc.d/下面的文件,有些没有被enable,是在哪儿设置的呢?

查看是否启动

for F in /etc/init.d/* ; do $F enabled && echo $F on || echo $F **disabled**; done

/etc/init.d/telnetd **disabled**
/etc/init.d/tigerface on

脚本加参数enabled返回0表示启动,返回1表示没有启用。

等同下面脚本:

#!/bin/sh

for F in /etc/init.d/* 
do 
	$F enabled
	if [ 0 -eq $? ] ;then
		echo $F on
	else
		echo $F **disabled**
	fi
done

原理分析:

启动脚本执行前会先执行/etc/rc.common,enable里面会检测/etc/rc.d/对应的文件是否可执行。

initscript="$1"
enabled() {                                                           
        name="$(basename "${initscript}")"
        [ -x "$IPKG_INSTROOT/etc/rc.d/S${START}${name##S[0-9][0-9]}" ]
} 

启动后台

uds >/dev/null &,默认为1代表stdout标准输出,正常不会有打印,异常才会打印

uds 2>/dev/null >/dev/null,2代表stderr标准错误输出,只有命令返回异常的错误信息才会输入到后面,正常的信息会打印出来

注意

1、权限问题,etc/init.d/下文件需要有执行权限,否则不能启动脚本,且看到异常打印;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值