openwrt 之 procd init 脚本

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

1,引入

        在openwrt中,/ect/init.d/*有很多脚本,在/etc/rc.d/下 会有这个 脚本的软连接,其中以数字开头(start = 99,相同时以首字母为调用顺序),这些脚本用于管理进程的启动,这些进程的启动和脚本都由守护进程--procd管理,下面解释procd init脚本的使用方法。参考链接:

[OpenWrt Wiki] Procd Init Scripts

2,procd init脚本接口的使用

查看当前服务支持的CMD行:

/etc/init.d/rs_mytest  [arg] :不带任何[arg]参数,查看当前支持的CMD

上面的脚本中增加了一个自定义的CMD--custom (也可增加多个),如何使用这个命令:

/etc/init.d/rs_mytest  custom

下面是procd init 脚本的一下接口API:

#!/bin/sh /etc/rc.common

USE_PROCD=1

注:
/etc/rc.common 脚本中定义了很多函数,如start_service等,
我们需要再自己的脚本中去复写这些函数体。
procd_open_instance  :打开一个实例,配置完,调用procd_close_instance关闭实例。
procd_set_param command   /usr/sbin/mytest :配置执行的命令
procd_append_param command -p 8 :追加命令行参数
service_start():
    procd_set_param env my_env_var=function 
        :为进程传递环境,进程可以通过get_env获取该环境变量

    procd_set_param limits core="unlimited"
        :为进程设置ulimit参数

    procd_set_param file /var/etc/your_service.conf 
        :为进程设置,当/var/etc/your_service.conf 这个文件改变了的话,将调用reload重启这个deamore

    procd_set_param stdout 1 
    procd_set_param stderr 1 
        :将标准输出和标准输入重定向到logd中,同时等级为info

    procd_set_param pidfile /var/run/somefile.pid
        :程序启动时写入自己的pid到这个文件,方便其他进程查看该服务是否运行

service_triggers()
    procd_add_reload_trigger "file1 file2":
        :当配置文件file1或file2改变时,执行reload_config,将会通过ubus广播config.change消息,
         才会再去执行这个reload

    procd_add_interface_trigger:
        ->需要配合    procd_set_param netdev eth0.2 使用 
        如:
            start_service ->增加    
                procd_set_param netdev eth0.2
            service_triggers ->增加    
                procd_add_interface_trigger "interface.*" "wan" /etc/init.d/myservice restart

3,一个例子

#!/bin/sh /etc/rc.common

USE_PROCD=1
START=99
STOP=99
PROGRAM=/usr/sbin/mytest
EXTRA_COMMANDS="custom"
EXTRA_HELP="--        custom help for the custom command"

service_triggers() {
                procd_add_reload_trigger "rs_mytest"
}

start_service()
{
        procd_open_instance
        procd_set_param command $PROGRAM 
        procd_append_param command -p 8
        procd_set_param stdout 1
        procd_close_instance
}
custom() {
        echo "mytest is a test cmd." 
}

4,一些小方法

//判断一个服务是否启动中
/etc/init.d/rs_mytest enabled && echo on


//脚本在还可追加
boot() {
        echo "在设备起来时,调用一次"
}
shutdown() {
        echo "在设备关机时,调用一次"
}

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值