[Openwrt]procd进程管理机制介绍

procd是一个C语言编写的OpenWrt进程管理服务,作为守护进程监控系统进程,确保异常退出的进程能被重新启动。它通过init脚本和ubus总线管理进程,支持配置文件变更检测、进程环境变量设置、资源限制等功能。启用和禁用功能需在系统重启后生效,且提供了如reload_config、start、stop等操作。
摘要由CSDN通过智能技术生成

通常的嵌入式系统均有一个守护进程,该守护进程监控系统进程的状态,如果某些系统进程异常退出,将再次启动这些进程。procd 就是这样一个进程,它是使用C语言编写的,一个新的 OpenWrt 进程管理服务。它通过init脚本来将进程信息加入到 procd 的数据库中来管理进程启动,这是通过ubus总线调用来实现,可以防止进程的重复启动调用。

enable和disable功能只有系统重启才能生效,这两条命令是通过添加、删除/etc/rc.d中的启动脚本来实现的。执行enable和disable后可以通过查看/etc/rc.d目录下的启动脚本来确认。

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

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

如果在自己的启动脚本中定义了 USE_PROCD 那就调用这些函数。在 rc.common 中重新定义了 start 函数,相当于重载了这些函数。

举例:

通常有两行内容是固定的,第一行表示使用“/etc/rc.common”来解释脚本。
第二行内容设置 USE_PROCD 变量为 1,表示使用 procd 来管理进程

(1)procd_open_instance 开始增加一个服务实例。

(2)procd_set_param 设置服务实例的参数值,通常会有以下几种类型的参数。

  1. command: 服务的启动命令行。


·  respawn: 进程意外退出的重启机制及策略,它需要有 3 个设置值。第一个设置为判断异常失败边界值(threshold),默认为3600秒,如果小于这个时间退出,则会累加重新启动次数,如果大于这个临界值,则将重启次数置 0。第二个设置为重启延迟时间(timeout),将在多少秒后启动进程,默认为5秒。第三个设置是总的失败重启次数(retry),是进程永久退出之前的重新启动次数,超过这个次数进程退出之后将不会再启动。默认为 5 次。也可以不带任何设置,那这些设置都是默认值。

·  env:进程的环境变量。

·  file:配置文件名,比较其文件内容是否改变。

·  netdev:绑定的网络设备(探测 ifindex 更改)。

·  limits:进程资源限制。
每次只能使用一种类型参数,其后是这个类型参数的值。

  1. procd_close_instance 完成进程实例的增加。

每个使用procd的程序都需要编写一个启动脚本

(4)procd_add_reload_trigger,增加配置文件触发器,每次配置文件的修改,如果调用了reload_config时,当前实例都被重启。有一个可选的参数为配置文件名称。其实它在内部是调用procd_open_trigger、procd_add_config_trigger和procd_close_trigger这3个函数来增加触发器。

(5)procd_open_validate,打开一个验证数组,是和 procd_close_validate 函数一起使用。

(6)procd_close_validate,关闭一个验证数组。示例 8-9 是软件包 firewall使用procd来对防火墙配置的触发器和验证。

(7)procd_open_service(name, [script]),至少需要一个参数,第一个参数是实例名称,第二个参数是可选参数为启动脚本。该函数仅在在rc.common 中调用,用于创建一个新的procd进程服务消息。

(8)procd_close_service,该函数不需要参数,仅在 rc.common 中调用,完成进程管理服务的增加。

(9)procd_kill,杀掉服务实例(或所有的服务实例)。至少需要一个参数,第一个参数是服务名称,通常为进程名,第二个是可选参数,是进程实例名称,因为可能有多个进程示例,如果不指定所有的实例将被关闭。该函数在 rc.common 中调用,用户从命令行调用 stop 函数时会使用该函数杀掉进程。

(10)uci_validate_section,调用 validate_data 命令注册为验证服务。在配置发生改变后对配置文件的配置项合法性进行校验。验证服务是在进程启动时通过 ubus 总线注册到procd进程中。输入以下命令,可以看到系统所有注册的验证服务。

在/etc/init.d文件夹中有一个文件:

sdk-ubus-init.sh

这个文件由/etc/rc.common文件解析。

 

  1. 设置参数列表
  • command

服务的启动命令行。

  • Respawn

进程意外退出的重启机制及策略,它需要有 3 个设置值。第一个设置为判断异常失败边界值(threshold),默认为3600秒,如果小于这个时间退出,则会累加重新启动次数,如果大于这个临界值,则将重启次数置 0。第二个设置为重启延迟时间(timeout),将在多少秒后启动进程,默认为5秒。第三个设置是总的失败重启次数(retry),是进程永久退出之前的重新启动次数,超过这个次数进程退出之后将不会再启动。默认为 5 次。也可以不带任何设置,那这些设置都是默认值。

·  env:进程的环境变量。

·  file:配置文件名,比较其文件内容是否改变。

·  netdev:绑定的网络设备(探测 ifindex 更改)。

·  limits:进程资源限制。
每次只能使用一种类型参数,其后是这个类型参数的值。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李小白20200202

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值