机器人程序自启动及状态监控的方法、系统及设备与流程

摘要: 本技术涉及机器人操作系统,特别是涉及一种机器人程序自启动及状态监控的方法、系统及设备。背景技术:1、随着智能机器人、语音交互设备及边缘ai终端的大规模应用,机器...
机器人程序自启动及状态监控的方法、系统及设备与流程

本技术涉及机器人操作系统,特别是涉及一种机器人程序自启动及状态监控的方法、系统及设备。

背景技术:

1、随着智能机器人、语音交互设备及边缘ai终端的大规模应用,机器人内部通常运行多个关键业务模块,包括语音识别模块、语音合成模块、导航与控制模块、视觉识别模块、端云通讯连接模块等。为保障机器人整机功能持续可用,需要确保各类业务模块程序稳定运行。由于机器人内部业务模块数量较多,模块相互之间存在复杂运行依赖关系,现有技术方案难以实现可靠、完备的进程监控与故障自愈。

2、当前主流进程监控方案主要分为两类。第一类为systemd、supervisor等通用开源守护工具,这类工具仅能够实现单一进程启停监控,主要依靠判断进程pid是否存在来识别进程存活状态,仅支持配置简单的重启次数。该类工具不具备进程依赖校验能力,无法区分僵尸态进程、停止态进程,不支持跨板卡进程联动管控,同时监控服务本身缺少异常防护机制,一旦监控程序失效,整套保活机制随之失效。

3、第二类为传统自研简易监控程序,通常仅通过定时轮询方式判断进程是否存活,检测到进程故障后直接执行重启操作。该类简易监控方案缺少进程启动前置依赖校验逻辑,不存在重启超时管控机制,无法实现故障发生后的反向依赖级联重启;同时不支持多板卡之间进程状态通信协同,也无法与整机ota升级流程联动开展运维管控,整体功能完整性不足。

4、由此可见,现有两类监控方案均存在明显短板,难以适配机器人多模块、强依赖、高可靠运行的整机场景。

技术实现思路

1、基于此,本技术旨在解决现有进程监控方案缺少依赖校验、异常进程识别能力不足、缺少级联自愈能力的缺陷,实现机器人多进程故障自动恢复,提升整机运行稳定性。

2、依据本技术一个方面,提供一种机器人程序自启动及状态监控的方法,包括:

3、加载配置文件,解析各待监控进程唯一标识、正向依赖、反向依赖、重启阈值;

4、启动待监控进程前基于操作系统内核进程状态接口读取进程原始状态,阻塞校验全部正向依赖待监控进程正常运行,识别僵尸态异常进程、停止态异常进程;

5、判定待监控进程为异常进程时,清理残留异常进程并按阈值执行重启,待监控进程恢复正常后自动重启全部反向依赖的上层待监控进程。

6、在一种实现方式中,所述配置文件为yaml静态配置文件;

7、加载配置文件并解析对应参数的实现步骤包括:

8、设备上电启动时一次性加载所述yaml静态配置文件,支持运行时热重载配置内容;

9、读取配置内每条待监控进程对应的进程唯一标识、进程启动指令、正向依赖进程列表、反向依赖进程列表、单次重启超时阈值、最大连续重启次数;

10、依据读取的配置字段生成全局进程数据表,数据表每条节点缓存运行互斥标识、异常标记、当前连续重启计数值。

11、在一种实现方式中,基于操作系统内核进程状态接口读取进程原始状态、校验依赖、识别进程状态的实现步骤包括:

12、采用linux系统/proc虚拟文件系统作为内核进程状态接口,遍历linux系统/proc目录下所有数字pid文件夹,读取每个pid目录内cmdline文件提取可执行文件名,与配置内待监控进程的进程唯一标识匹配定位目标进程pid;

13、读取目标pid目录下stat文件解析进程状态字符,区分状态字符为z的僵尸态异常进程、状态字符为t的停止态异常进程、无对应pid目录的退出进程、s/r/i正常运行态进程;

14、遍历当前待监控进程的正向依赖进程列表,循环执行前述进程匹配与状态解析操作校验每一条依赖进程,若任意依赖进程为僵尸态异常进程、停止态异常进程或进程退出,则持续循环等待校验,直至全部依赖进程为正常运行态进程后再执行目标待监控进程启动流程。

15、在一种实现方式中,清理残留异常进程的实现步骤包括:

16、识别到待监控进程为僵尸态异常进程或停止态异常进程时,检索该进程唯一标识对应的全部残留pid;

17、向残留pid进程发送sigterm信号执行优雅终止,等待预设时长;

18、等待时长结束后若残留进程仍未退出,发送sigkill信号强制查杀全部残留异常进程。

19、在一种实现方式中,按阈值执行重启的实现步骤包括:

20、清理完残留异常进程后,将全局运行互斥标识置为true,执行配置内进程启动指令拉起新的待监控进程;

21、启动计时器计时,同时将当前连续重启计数自增1;

22、若计时时长达到单次重启超时阈值仍未检测到正常运行的目标待监控进程,判定本次重启失败,再次执行重启流程;

23、若当前连续重启计数达到最大连续重启次数阈值,则停止自动重启操作,向外推送永久故障告警消息;检测到目标待监控进程正常运行后,将运行互斥标识置为false、异常标记置为false,并清零当前连续重启计数。

24、在一种实现方式中,自动重启反向依赖上层待监控进程的实现步骤包括:

25、待监控进程恢复正常运行后,发布进程正常消息,消息携带该进程唯一标识、pid、运行状态;

26、读取该进程配置内反向依赖进程列表,遍历列表内所有上层待监控进程唯一标识;

27、针对每一个上层待监控进程,依次执行依赖校验、异常判定、重启的完整操作。

28、在一种实现方式中,所述方法还包括监控自守护操作:

29、监控主进程创建守护子进程,二者相互心跳检测;监控主进程异常失效时,由守护子进程自动重启监控主进程。

30、在一种实现方式中,监控自守护操作的实现步骤包括:

31、监控主进程完成配置加载、进程巡检逻辑初始化后,调用fork函数生成独立守护子进程;

32、监控主进程与守护子进程按照固定周期互相发送心跳数据包,周期性校验对方进程存活状态;

33、守护子进程连续多次未收到监控主进程心跳包时,判定监控主进程异常失效,延迟等待预设时长后执行监控主进程启动指令,重新拉起整套监控服务。

34、在一种实现方式中,所述方法还包括多板卡分布式协同管控操作:

35、机器人各硬件板卡本地独立运行监控程序,板卡间同步进程状态,实现跨板卡依赖校验与跨板卡反向依赖进程联动重启。

36、在一种实现方式中,多板卡分布式协同管控操作的实现步骤包括:

37、机器人每一块主控、驱动、通信硬件板卡分别独立部署一套用于进程监控、依赖校验、故障自愈的本地监控程序;

38、板卡之间通过预设自定义通信协议交互,同步各板卡全部待监控进程的进程唯一标识、pid、实时运行状态、故障告警消息;

39、本地监控程序接收远端板卡同步的进程数据后,执行正向依赖校验逻辑,若远端底层待监控进程恢复正常,本地监控程序跨板卡触发对应上层反向依赖待监控进程重启流程。

40、在一种实现方式中,所述方法还包括运维交互与ota联动管控操作:

41、提供命令行交互接口输出进程可视化状态,并与整机ota升级服务双向交互管控待监控进程启停。

42、在一种实现方式中,运维交互与ota联动管控操作的实现步骤包括:

43、对外开放shell命令行交互接口,接收外部运维终端或上层程序指令,执行查看进程列表、手动重启指定进程、新增待监控进程、移除待监控进程、读取历史故障日志操作;

44、实时采集全部待监控进程的名称、pid、运行状态、当前连续重启计数、故障类型,输出标准化可视化状态数据;

45、与整机ota升级服务建立双向通信链路,ota升级启动前按照正向依赖顺序逐级停止所有待监控进程,ota升级文件校验完成后,依次执行进程监控、依赖校验与故障自愈流程,依照依赖拓扑逐级拉起全部待监控进程。

46、依据本技术另一个方面,提供一种机器人程序自启动及状态监控的系统,包括:配置解析模块、进程状态校验模块、故障自愈管控模块;

47、所述配置解析模块,用于加载配置文件,解析各待监控进程唯一标识、正向依赖、反向依赖、重启阈值;

48、所述进程状态校验模块,用于启动待监控进程前基于操作系统内核进程状态接口读取进程原始状态,阻塞校验全部正向依赖待监控进程正常运行,识别僵尸态异常进程、停止态异常进程;

49、所述故障自愈管控模块,用于判定待监控进程为异常进程时,清理残留异常进程并按阈值执行重启,且在待监控进程恢复正常后自动重启全部反向依赖的上层待监控进程。

50、在一种实现方式中,所述配置文件为yaml静态配置文件;

51、所述配置解析模块具体用于:设备上电启动时一次性加载所述yaml静态配置文件,并支持运行时热重载配置内容;读取配置内每条待监控进程对应的进程唯一标识、进程启动指令、正向依赖进程列表、反向依赖进程列表、单次重启超时阈值、最大连续重启次数;依据读取的配置字段生成全局进程数据表,数据表每条节点缓存运行互斥标识、异常标记、当前连续重启计数值。

52、在一种实现方式中,所述进程状态校验模块具体用于:

53、采用linux系统/proc虚拟文件系统作为内核进程状态接口,遍历linux系统/proc目录下所有数字pid文件夹,读取每个pid目录内cmdline文件提取可执行文件名,与配置内待监控进程的进程唯一标识匹配定位目标进程pid;读取目标pid目录下stat文件解析进程状态字符,区分状态字符为z的僵尸态异常进程、状态字符为t的停止态异常进程、无对应pid目录的退出进程、s/r/i正常运行态进程;遍历当前待监控进程的正向依赖进程列表,循环执行前述进程匹配与状态解析操作校验每一条依赖进程,若任意依赖进程为僵尸态异常进程、停止态异常进程或进程退出,则持续循环等待校验,直至全部依赖进程为正常运行态进程后再执行目标待监控进程启动流程。

54、在一种实现方式中,所述故障自愈管控模块包括异常清理单元;

55、所述异常清理单元,用于识别到待监控进程为僵尸态异常进程或停止态异常进程时,检索该进程唯一标识对应的全部残留pid;向残留pid进程发送sigterm信号执行优雅终止,等待预设时长;等待时长结束后若残留进程仍未退出,发送sigkill信号强制查杀全部残留异常进程。

56、在一种实现方式中,所述故障自愈管控模块包括阈值重启管控单元;

57、所述阈值重启管控单元,用于清理完残留异常进程后,将全局运行互斥标识置为true,执行配置内进程启动指令拉起新的待监控进程;启动计时器计时,同时将当前连续重启计数自增1;若计时时长达到单次重启超时阈值仍未检测到正常运行的目标待监控进程,判定本次重启失败,再次执行重启流程;若当前连续重启计数达到最大连续重启次数阈值,则停止自动重启操作,向外推送永久故障告警消息;检测到目标待监控进程正常运行后,将运行互斥标识置为false、异常标记置为false,并清零当前连续重启计数。

58、在一种实现方式中,所述故障自愈管控模块包括反向级联自愈单元;

59、所述反向级联自愈单元,用于待监控进程恢复正常运行后,发布进程正常消息,消息携带该进程唯一标识、pid、运行状态;读取该进程配置内反向依赖进程列表,遍历列表内所有上层待监控进程唯一标识;针对每一个上层待监控进程,依次执行依赖校验、异常判定、重启的完整操作。

60、在一种实现方式中,所述系统还包括监控自守护模块;

61、所述监控自守护模块,用于控制监控主进程创建守护子进程,实现二者相互心跳检测,并在监控主进程异常失效时,通过守护子进程自动重启监控主进程。

62、在一种实现方式中,所述监控自守护模块具体用于:

63、监控主进程完成配置加载、进程巡检逻辑初始化后,调用fork函数生成独立守护子进程;控制监控主进程与守护子进程按照固定周期互相发送心跳数据包,周期性校验对方进程存活状态;守护子进程连续多次未收到监控主进程心跳包时,判定监控主进程异常失效,延迟等待预设时长后执行监控主进程启动指令,重新拉起整套监控服务。

64、在一种实现方式中,所述系统还包括多板卡分布式协同管控模块;

65、所述多板卡分布式协同管控模块,用于控制机器人各硬件板卡本地独立运行监控程序,实现板卡间进程状态同步,完成跨板卡依赖校验与跨板卡反向依赖进程联动重启。

66、在一种实现方式中,所述多板卡分布式协同管控模块具体用于:

67、机器人每一块主控、驱动、通信硬件板卡分别独立部署一套本地监控程序;通过预设自定义通信协议实现各板卡交互,同步各板卡全部待监控进程的进程唯一标识、pid、实时运行状态、故障告警消息;通过本地监控程序接收远端板卡同步的进程数据后,执行正向依赖校验逻辑,若远端底层待监控进程恢复正常,跨板卡触发对应上层反向依赖待监控进程重启流程。

68、在一种实现方式中,所述系统还包括运维与ota联动管控模块;

69、所述运维与ota联动管控模块,用于提供命令行交互接口输出进程可视化状态,并与整机ota升级服务双向交互,管控待监控进程启停。

70、在一种实现方式中,所述运维与ota联动管控模块具体用于:

71、对外开放shell命令行交互接口,接收外部运维终端或上层程序指令,执行查看进程列表、手动重启指定进程、新增待监控进程、移除待监控进程、读取历史故障日志操作;实时采集全部待监控进程的名称、pid、运行状态、当前连续重启计数、故障类型,输出标准化可视化状态数据;与整机ota升级服务建立双向通信链路,ota升级启动前按照正向依赖顺序逐级停止所有待监控进程,ota升级文件校验完成后,依次执行进程监控、依赖校验与故障自愈流程,依照依赖拓扑逐级拉起全部待监控进程。

72、依据本技术一个方面,提供一种计算机设备,包括:

73、一个或多个处理器;

74、存储装置,用于存储一个或多个程序;

75、当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如前任一所述的方法。

76、由此,本技术提供的一种机器人程序自启动及状态监控的方法,与现有技术相比,通过对进程正向依赖做前置阻塞校验,能够避免因依赖缺失引发的程序启动失败,可识别僵尸进程、停止态这类常规手段难以捕获的异常业务进程,并对残留异常进程进行清理,同时结合重启阈值完成异常进程重启,还可依据反向依赖联动恢复上层业务进程,实现进程故障自动自愈,有效提升机器人整机业务运行可靠性,减少故障带来的业务中断。

77、除此之外,本技术方案通过双重重启阈值抑制无效循环重启,控制系统资源占用;依托守护子进程消除监控服务自身的单点失效风险;支持跨板卡的进程监控与依赖联动,适配多板卡分布式硬件架构;集成命令行运维与ota升级管控能力,降低整机开发集成成本;并且依靠配置文件即可完成监控业务的增改,无需修改核心代码,具备良好的可扩展性,降低不同型号设备的软件迭代工作量。