初始化
init.d
Openwrt 使用自己的初始化脚本系统,所有的初始化脚本位于 /etc/init.d 目录下。
任何一个初始化脚本必须包含基本的 start() 和 stop() 函数。当系统启动或用户拉起对应的进程时会调用 start() 函数,而 start() 函数的最终解析是在脚本 /etc/rc.common 中。
#!/bin/sh /etc/rc.common
# Example script
# Copyright (C) 2007 OpenWrt.org
START=10
STOP=15
start() {
echo start
# commands to launch application
}
stop() {
echo stop
# commands to kill application
}
第一行使用 /bin/sh /etc/rc.common 作为脚本解释器并在执行脚本前调用 main 和检查脚本
初始化脚本中的 enable() 和 disable() 函数,功能用于创建或删除 /etc/rc.d 下脚本的链接,来决定当系统启动(boot)时是否直接拉起此进程。
备注:系统启动脚本是 /etc/init.d/rcS . 系统脚本启动的顺序是以“S+数字”后面的数字来巨额额定的。例如: S10boot 脚本会在 S50cron 脚本之前启动。
Procd
Procd:Openwrt的进程管理守护进程(process management daemon),它与初始化脚本(/etc/init.d/*)保持联系
写一个procd调用的初始化(init)脚本
#!/bin/sh /etc/rc.common
# Copyright (C) 2007-2011 OpenWrt.org
START=12
USE_PROCD=1
start_service() {
logger "start XXXX server ......"
procd_open_instance
procd_set_param command /usr/local/bin/
procd_set_param respawn
procd_close_instance
}
-
start_service() 为注册服务到procd中,如果自己的应用程序没有配置文件,只要实现start_service()就好, procd_set_param设置设置好多参数,command为自己的应用路径, respawn可以检测自己的应用,如果挂掉可以重启,也可以设置重启间隔,其它参数可以自己查阅。
-
stop_service() 这个时procd kill自己的应用程序后调用的,若果你的应用程序关掉后,需要一些清理工作,需要实现这个。
-
service_triggers() 如果自己的应用需要关联一个配置文件test,(需要放在/etc/config/目录下),可以跟踪文件的修改情况,如果这个文件有改变,就调用reload_service().在service_triggers也可以添加跟踪网络的修改,也可以同时跟踪多个配置文件。
-
reload_service() 配置文件改变后,需要调用这个函数,可以根据自己需要实现功能。
注:start和reload区别是,start一般是指应用程序启动, reload一般是指只是重新加载与配置文件改变相关的部分,不把整个应用程序重新启动。这种方式应该是推荐的,如果你再reload里重新启动应用也是可以的。
网友评论