openwrt--软件启动机制

内核启动完成后首先调用“/etc/init.d/rcS”,然后再由rcS逐个启动各个软件进程。如果按照这个方法,我们需要将每一个待启动的程序启动命令按行放入rcS文件中,并顺序执行。这种实现方法在软件启动进程列表不变时工作得非常好,如果需要动态修改时,则不容易以程序来控制。OpenWrt引入了一个便于控制的启动机制,这种机制在/etc/rc.d目录下创建每个软件的软链接方式,由rcS脚本在该目录读取启动启动命令的软连接,然后启动软连接所指向的程序,由于每一个软连接均包含一个数字,这样就可以按照数字顺序读取并进行启动了。

所有软件的启动脚本都放在/etc/init.d/目录下,如果需要跟随系统启动,将启动脚本软连接到/etc/rc.d/S*下即可(可使用后面的enable指令链接)。

启动脚本模板

    #!/bin/sh /etc/rc.common
    # 特殊注释行,表示使用 /etc/rc.common 这个脚本来提供一些基本函数

    START=90
    # 软件启动顺序
    STOP=90
    # 软件关闭顺序
    USE_PROCD=1

    start_service() {
        echo "start function"
        return 0
    }

    stop_service() {
        echo "stop function"
        return 0
    }

    reload_service() {
        echo "reload function"
        return 0
    }

    boot() {
        echo "boot function"
        return 0
    }

    shutdown() {
        echo "shutdown function"
        return 0
    }

    help() {
        echo "help function"
        return 0
    }

启动脚本使用方法

    sh_path function
  • sh: 脚本路径,如/etc/init.d/network。
  • function:脚本方法,如start。
脚本方法含义
start启动函数,使用以后调用 start_service 函数,在系统运行时启动服务则使用该方法
stop停止函数,使用以后调用 stop_service 函数,在系统运行时停止服务则使用该方法
restart重启动函数,使用以后先调用 stop_service 函数,然后调用 start_service 函数
reload重新读取配置,使用以后调用 reload_service 函数
enable打开服务自启动,使用以后将脚本链接到/etc/rc.d/目录下
boot系统启动调用函数,如果定义了 boot 函数,则调用 boot 函数,如果没有定义 boot 函数,则调用 start_service 函数,系统开启时会启动服务,会调用一次该方法
shutdown关闭系统调用函数,如果定义了 shutdown 函数,则调用 shutdown 函数,如果没有定义 shutdown 函数,则调用 stop_service 函数,系统关闭时关闭服务,会调用一次该方法
enable打开服务自启动,使用以后将脚本链接到/etc/rc.d/目录下
disable关闭服务自启动,使用以后删除/etc/rc.d/目录下的链接文件
help帮助函数,使用以后调用help函数
enabled
running
status
trace
info

启动脚本使用方法

可以先在文件夹/etc/init.d/下创建一个测试文件test,修改文件的权限为755,最后将启动脚本模板复制到文件中。

测试结果

    root@OpenWrt:/# /etc/init.d/test start
    start function
    root@OpenWrt:/# /etc/init.d/test stop
    stop function
    root@OpenWrt:/# /etc/init.d/test restart
    stop function
    Command failed: Not found
    start function
    root@OpenWrt:/# /etc/init.d/test reload
    reload function
    root@OpenWrt:/# /etc/init.d/test boot
    boot function
    root@OpenWrt:/# /etc/init.d/test shutdown
    shutdown function
    root@OpenWrt:/# /etc/init.d/test help
    boot function
    root@OpenWrt:/# /etc/init.d/test enable
    root@OpenWrt:/# ls /etc/rc.d/S90test 
    /etc/rc.d/S90test
    root@OpenWrt:/# /etc/init.d/test disable
    root@OpenWrt:/# ls /etc/rc.d/S90test 
    ls: /etc/rc.d/S90test: No such file or directory
    root@OpenWrt:/# 
    CTRL-A Z for help | 115200 8N1 | NOR 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值