OpenWRT之procd服务

简介

Openwrt 支持模块化编程,增加新功能非常简单。但是一些基础模块必须包含, 它们是OpenWrt核心。如:实用基础库libubox、系统总线ubus、网络接口管理模块netifd、核心工具模块ubox、服务管理模块procd。

在OpenWRT系统内init进程procd取代,procd作为父进程可以监控子进程的状态。一旦子进程退出后即可在某一个时刻尝试进行重启进程。它通过init脚本来将进程信息加入到procd的数据库中来管理进程启动,这是通过ubus总线调用来实现,可以防止进程的重复启动调用. 在OpenWRT系统内使用procd监控的有uhttpd, netifd等。在/etc/init.d/文件夹内的启动文件带有USE_PROCD=1标志.

procd的进程管理功能主要包含3个部分:

  • reload_config: 检查配置文件是否发生变化,如果有变化则通知procd进程;
  • procd守护进程: 接收使用者的请求,增加或删除所管理的进程,并监控进程的状态,如果发现进程退出,则再次启动进程;
  • procd.sh: 提供函数封装procd提供系统总线方法,调用者可以非常便利的使用procd提供的方法;

以启动脚本为例:

#!/bin/sh /etc/rc.common
# /etc/init.d
# Copyright (C) 2008 OpenWrt.org   

# 执行的顺序,在/etc/rc.d目录下自动生成S98xxx,K98xxxx,按照顺序执行。
START=98
STOP=98

# 使用procd启动
USE_PROCD=1

DAEMON=main
PROG=/usr/bin/$DAEMON

CONFIG=mqtt
CONFIGFILE=/etc/config/$CONFIG


# 向 procd 注册并启动服务,是将在 services 所管理对象里面增加了一项
start_service() {
	echo "start user service!"

	# 开始增加一个名为mqtt的服务实例, 在procd看来一个应用程序可以多个实例
	# ubus call service list 可以查看实例
	procd_open_instance mqtt
	
	#定义respawn参数,进程意外退出的重启机制及策略
	# threshold:异常失败边界值3600;timeout:重启延迟时间5;retry:失败重启次数5
	# procd_set_param respawn retry=10
	procd_set_param respawn 3600 5 10
	
	# 执行的命令是"/usr/bin/main", 若后面有参数可以直接在后面加上
	procd_set_param command $PROG '&'

	# 配置文件名,比较其文件内容是否改变
	# procd_set_param file $CONFIGFILE

	# 绑定的网络设备(探测 ifindex 更改)
	# netdevs=
	# procd_set_param netdev $netdevs

	# 指定对应的pidfile
	# procd_set_param pidfile /var/run/${DAEMON}.pid
	

	# 完成进程实例的增加
	procd_close_instance
}

# 让 procd 解除注册,并关闭服务, 是将在 services 中的管理对象删除
stop_service() {
	echo "stop user service!"
	# rm -f /var/run/${DAEMON}.pid
	# service_stop "$PROG"
	killall $DAEMON
}

# 重启服务,如果定义了该函数,在 reload 时将调用该函数,否则再次调用 start 函数
reload_service(){
	echo "reload user service!"
	stop
	start
}

# 配置文件或网络接口改变之后触发服务重新读取配置
service_triggers(){
	echo "triggers user service!"
	procd_add_reload_trigger $CONFIG
}

# 用于判断进程是否启动成功
# service_started(){

# }


restart() {
   stop
   start
}

参考文章

  1. OpenWrt 基础软件模块之procd
  2. procd init script parameters
  3. How to write a procd init script?
  4. openwrt之procd进程管理服务
  5. 使用procd执行进程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值