上犹电脑信息网我们一直在努力
您的位置:上犹电脑信息网 > 电脑怎么了 > 怎么修复lsp-嵌入式Linux进程管理PCD,告别sleep控制的脚本,告别“看门狗”

怎么修复lsp-嵌入式Linux进程管理PCD,告别sleep控制的脚本,告别“看门狗”

作者:上犹日期:

返回目录:电脑怎么了

不定期分享linux系统、shell脚本相关文章,喜欢大叔的作品,请关注我,本文在头条原创首发,未经许可禁止转载。前言

Linux嵌入式系统的进程启动,大多数是在rcS脚本之后启动各个业务模块,使用sleep命令控制脚本的间隔时间,比如脚本是这样。


#!/bin/bashexport PATH="/xxx/bin:$PATH"export LD_LIBRARY_PATH="/xxx/lib:$LD_LIBRARY_PATH"/xxx/bin/proctest1 1>/dev/null 2>&1 &slepp 1/xxx/bin/proctest2 1>/dev/null 2>&1 &sleep 1...

而一些进程需要依赖Linux系统的环境或者某一个进程就绪后才继续启动其他进程,比如某一个网卡是否启动,我们常用grep命令来过滤是否就绪,比如这样:


ifconfig |grep lanxx 或者ps x|grep [p]rocxx[ $? -eq 0 ] && /xxx/bin/porc1

或者我们担心进程在某些情况下是否挂掉,我在启动脚本的最后还需要启动一个app_watchdog脚本定时来检查脚本是否存在,比如脚本是这样:


linux系统进程"看门狗"脚本


这样的进程管理和进程看护,显然不是很规范,而"看门狗"脚本会轮询后台启动的进程,大量的sleep和ps查询,对于硬件配置不高的嵌入式产品就有些浪费资源。


PCD是什么,能够做什么?

Process Control Daemon简称PCD,过程控制守护程序,主要用于基于Linux的嵌入式产品,是开源的、轻量级系统管理,可以减少系统的启动时间并增强系统的可靠性。


Process Control Daemon


  • PCD能够做什么
  1. 增强对系统中所有流程的控制和监视
  2. 减少系统的启动时间
  3. 何时启动每个进程,启动前需要依赖哪些资源,启动失败该做什么操作
  4. 改善系统的稳定性
  5. 形成进程启动的图形关系表
PCD软件的编译安装

既然PCD主要用于嵌入式产品中,它支持的架构有:ARM、MIPS、X86、X64。这里我使用centos6.7x64来进行说明。


  • 首先我们下载PCD软件

wget https://excellmedia.dl.sourceforge.net/project/pcd/pcd-sdk-latest.tar.bz2

  • 解压PCD软件

[root@api PCD]# tar -jxvf pcd-sdk-latest.tar.bz2 pcd-1.1.6/pcd-1.1.6/examples/pcd-1.1.6/examples/parse-rules.shpcd-1.1.6/examples/graph.txtpcd-1.1.6/examples/etc/pcd-1.1.6/examples/etc/scripts/pcd-1.1.6/examples/etc/scripts/product.pcdpcd-1.1.6/examples/etc/scripts/system.pcdpcd-1.1.6/examples/etc/scripts/component.pcd...

  • 配置PCD

PCD支持通过Kconfig配置引擎配置PCD,类似于Linux Kernel配置方法,这里使用make menuconfig在文本菜单中配置PCD,如下图:


[root@api pcd-1.1.6]# make menuconfig

PCD配置项主菜单


在这个菜单中我们可以选择平台、设备交叉编译器、设置安装的目录等。我们依次进入来选择需要编译的平台,如下图:


PCD Configuration -->PCD Compile time configurations --->Target Platform type (X86) --->

选择PCD编译的平台ARM、MIPS等


也可以配置PCD的安装目录、头文件目录或者开启其他选项信息等。


PCD安装目录和其他信息


对于交叉编译我们需要设备编译器、头文件、依赖的库等,可以通过环境变量来配置:


export CC=armeb-linux-uclibceabi-gcc#配置编译器export INCLUDE_DIR_PREFIX=/your_dir/include#配置头文件目录export INSTALL_DIR_PREFIX=/your_dir/INSTALL_DIR#配置最后安装的目录export LIB_DIR_PREFIX=/your_dir/lib#配置需要依赖的库文件export CONFIG_ARM=y#配置平台文件需要和编译器对应#其他为:CONFIG_X86 或 CONFIG_MIPS 或CONFIG_X64

  • 编译PCD软件

在配置完毕后需要编译PCD软件了,直接make,下图是编译过程。


PCD编译过程


编译完毕会在pcd目录产生一个bin目录,我们需要的程序和lib都在这个目录。


[root@api bin]# tree -l.├── host└── target ├── lib │ ├── libipc.so │ └── libpcd.so └── usr └── sbin └── pcd5 directories, 3 files

上面 user/bin/pcd 就是PCD程序,libipc.so,libpcd.so是pcd启动时需要依赖的库文件,在部署的时候需要将这两个库文件放到动态链接库的目录,比如这样做:


export LD_LIBRARY_PATH="/xxx/lib:$LD_LIBRARY_PATH"

至此,PCD的编译就完毕了,而对PCD规则管理和使用,下面继续讲解。


PCD的脚本文件和规则配置

首先我们看一下PCD程序的说明


[root@api sbin]# export LD_LIBRARY_PATH="/usr/lib:$LD_LIBRARY_PATH"

PCD程序帮助说明


得到PCD的帮助说明后,我们可以这样启动PCD程序。


./pcd -f ./product.pcd -t 200 -v -d -e /log/pcderror.log-f :指定规则文件-v :显示详细信息-d :显示调试信息-t :指定规则间隔时间200ms-e :指定pcd错误日志路径

对于PCD规则脚本我们可以定义一个住脚本,包含其它多个规则脚本,在上面的product.pcd 脚本中可以这样定义,如下:


INCLUDE = ./system.pcdINCLUDE = ./env.pcd#此路径需要写绝对路径

具体的脚本规则是:


RULE = HSG_PROC1START_COND = NONECOMMAND = /xxx/bin/proc1 > /dev/nullSCHED = NICE,0DAEMON = YESEND_COND = NONEEND_COND_TIMEOUT = -1FAILURE_ACTION = RESTARTACTIVE = YES

脚本规则详细说明如下:


RULE = SYSTEM_PROC#规则名称,格式: 文件前缀_程序名称START_COND = {NONE | FILE,[filename] | RULE_COMPLETED,[rule],.. | NET_DEVICE,[netdev] | IPC_OWNER,[owner] | ENV_VAR,[variable,value]}#前置条件可以判断文件,网卡,变量,规则等是否就绪COMMAND = [parameters] [$variable] #启动参数,可以使用变量,在执行前使用export宣告变量即可SCHED = NICE,-19..19 | FIFO,1..99#程序启动优先级DAEMON = YES | NO#是否守护该进程,也就是代替watchdog脚本 END_COND = NONE | FILE,[filename] | NET_DEVICE,[netdevice] | WAIT,[delay] | EXIT,[status] | IPC_OWNER,[owner]#结束前的提交,可以额是判断文件,网卡,等待,对出状态等。END_COND_TIMEOUT = -1 | 0..99999 #结束超时时间,一般是-1,不设置FAILURE_ACTION = NONE | REBOOT | RESTART | EXEC_RULE#进程启动失败时的动作ACTIVE = YES | NO #是否自动激活

从PCD的规则脚本可以看出PCD对于进程管理做出了充分考虑,可以指定进程启动的前置条件或进程启动失败后的动作,是守护该进程,是否自动激活等。


最后展示一下PCD的启动关系示例

到这里PCD的介绍就完毕了,最后我们可以使用PCD自带的工具禅城dot文件,来生成各个进程启动的依赖关系,如下图:


PCD进程启动关系示例图


从图中,我们可以很清晰看出各个进程的依赖关系,让我们更方便的管理和展示,同时可以替代watchdog来自动启动崩溃的进程,到此PCD的编译和使用说明完毕。


最后喜欢大叔文章的可以关注我哦,欢迎大家评论留言。

本文标签:怎么修复lsp(1)

相关阅读

关键词不能为空

电脑蓝屏_电脑怎么了_win7问题_win10问题_设置问题_文件问题_上犹电脑信息网

关于我们