START=90
STOP=90
SERVICE=app
USE_PROCD=1
start_service()
{
procd_open_instanceprocd_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系统中使用procd编写服务脚本,包括start_service()、stop_service()、service_triggers()和reload_service()四个关键函数的用法。通过start_service()注册服务,stop_service()进行应用程序关闭后的清理,service_triggers()跟踪配置文件变化,并在文件更新时调用reload_service()进行重新加载,避免全应用重启。配置文件变更检测通过MD5值比较实现,触发service event事件。
8867

被折叠的 条评论
为什么被折叠?



