OpenWrt的中procd自己脚本编写

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


START=90
STOP=90
SERVICE=app


USE_PROCD=1


start_service() 

{

    procd_open_instance
    procd_set_param command /usr/sbin/app
    procd_set_param respawn
    procd_close_instance

}

service_triggers()
{
    procd_add_reload_trigger "config_file_name"
}

reload_service() 

{

}

stop_service() 

{

}

解释

1.  start_service() 为注册服务到procd中,如果自己的应用程序没有配置文件,只要实现start_service()就好, procd_set_param设置设置好多参数,command为自己的应用路径, respawn可以检测自己的应用,如果挂掉可以重启,也可以设置重启间隔,其它参数可以自己查阅。

2. stop_service()  这个时procd kill自己的应用程序后调用的,若果你的应用程序关掉后,需要一些清理工作,需要实现这个。

3. service_triggers() 如果自己的应用需要关联一个配置文件test,(需要放在/etc/config/目录下),可以跟踪文件的修改情况,如果这个文件有改变,就调用reload_service().在service_triggers也可以添加跟踪网络的修改,也可以同时跟踪多个配置文件。

4. reload_service() 配置文件改变后,需要调用这个函数,可以根据自己需要实现功能。

注:start和reload区别是,start一般是指应用程序启动, reload一般是指只是重新加载与配置文件改变相关的部分,不把整个应用程序重新启动。这种方式应该是推荐的,如果你再reload里重新启动应用也是可以的。


一般配置文件文件改变是通过MD5值来判断的,/sbin/reload_config,内容如下

#!/bin/sh

MD5FILE=/var/run/config.md5
[ -f $MD5FILE ] && {
for c in `md5sum -c $MD5FILE 2>/dev/null| grep FAILED | cut -d: -f1`; do
ubus call service event "{ \"type\": \"config.change\", \"data\": { \"package\": \"$(basename $c)\" }}"
done
}
md5sum /etc/config/* > $MD5FILE

就是调用procd注册的service event事件, 例如网页修改配置后,会通过rpcd调用/sbin/reload_config

你可能感兴趣的:(OpenWrt)