嵌入式linux系统进程管理工具-perp交叉编译及配置

嵌入式linux系统进程管理工具-perp交叉编译及配置 阿帅 2023-11-17 13:32:08 891

概述

perp是一款非常优秀、资源占用低的开源的多进程管理框架,多用在嵌入式系统环境下。由于网上除了官网的资源外,其他可参考的资源较少,我在这里记录一下我之前使用的经验,并分享给大家。

和restartd比较:perp相比与restartd,perp的功能、可监视的进程数量都更多。

资源占用:
ROM:556K (最大占用,可裁剪)

下载

http://b0llix.net/perp/site.cgi?page=about

交叉编译

过程

1、从官网下载源码包 perp-2.07.tar.gz
解压:tar -zxvf perp-2.07.tar.gz

2、vi conf.mk
修改CC,STRIP为交叉编译工具
修改安装路径,例如/home/ss/perp_install

3、cd lasagna;make
先编译lasagna库

4、make

报错

报:mk_outvec、mk_rlimit、mksysstr相关错误

原因:编译出的上述工具是在编译时用到的,即在编译主机上使用,而交叉编译将它们编译成目标机架构了。
解决:修改lasagna/Makefile,用本机的GCC编译它们

outvec/mk_outvec : outvec/mk_outvec.c
    gcc $(CFLAGS) -o $@ outvec/mk_outvec.c

....

rlimit/mk_rlimit : rlimit/mk_rlimit.c
    gcc $(CFLAGS) -o $@ rlimit/mk_rlimit.c

....

sysstr/mksysstr : sysstr/mksysstr.c
    gcc $(CFLAGS) -o $@ sysstr/mksysstr.c

配置

make install得到了一些bin文件,如下:

ss@ss-vm:~/ss_sdk/third_part$ ls perp_install/usr/sbin/ -l
总用量 664
-rwxr-xr-x 1 ss ss 27928 11月 26 15:34 perpboot
-rwxr-xr-x 1 ss ss 26020 11月 26 15:34 perpctl
-rwxr-xr-x 1 ss ss 60500 11月 26 15:34 perpd
-rwxr-xr-x 1 ss ss 19404 11月 26 15:34 perphup
-rwxr-xr-x 1 ss ss 31924 11月 26 15:34 perpls
-rwxr-xr-x 1 ss ss 24676 11月 26 15:34 perpok
-rwxr-xr-x 1 ss ss  5273 11月 26 15:34 perp-setup
-rwxr-xr-x 1 ss ss 29620 11月 26 15:34 perpstat
-rwxr-xr-x 1 ss ss 24452 11月 26 15:34 runargs
-rwxr-xr-x 1 ss ss 19240 11月 26 15:34 runargv0
-rwxr-xr-x 1 ss ss 23748 11月 26 15:34 runchoom
-rwxr-xr-x 1 ss ss 19596 11月 26 15:34 rundetach
-rwxr-xr-x 1 ss ss 25264 11月 26 15:34 rundeux
-rwxr-xr-x 1 ss ss 29548 11月 26 15:34 runenv
-rwxr-xr-x 1 ss ss 24544 11月 26 15:34 runfile
-rwxr-xr-x 1 ss ss 30484 11月 26 15:34 runlimit
-rwxr-xr-x 1 ss ss 23036 11月 26 15:34 runlock
-rwxr-xr-x 1 ss ss 20532 11月 26 15:34 runpause
-rwxr-xr-x 1 ss ss 19324 11月 26 15:34 runsession
-rwxr-xr-x 1 ss ss 44172 11月 26 15:34 runtool
-rwxr-xr-x 1 ss ss 27024 11月 26 15:34 runtrap
-rwxr-xr-x 1 ss ss 22380 11月 26 15:34 runuid
-rwxr-xr-x 1 ss ss 14880 11月 26 15:34 sissylog
-rwxr-xr-x 1 ss ss 38508 11月 26 15:34 tinylog
-rwxr-xr-x 1 ss ss  1375 11月 26 15:34 tinylog_run

其中,常用的到只有perpctl、 perpls 、 perpd

1、创建待监视进程的运行规则

1、创建/etc/perp
2、在/etc/perp/下创建目标目录,例如:

/etc/perp
└── perp_demo
    ├── rc.log
    ├── rc.main

添加粘滞位:
chmod +t /etc/perp/perp_demo
该目录存放待监视进程的start、stop、restart及log记录等规则。

rc.main

文件权限:所属用于至少需要读和执行权限。
没有执行权限,将导致启动异常。

示例:

#!/bin/sh
exec 2>&1

TARGET=${1}
SVNAME=${2}


## start target:
start() {
    echo "*** ${SVNAME}: starting perp_demo..."
    exec \
      app_demo
}


## reset target:
reset() {
    case $3 in
      'exit' )
          echo "*** ${SVNAME}: exited status $4" ;;
      'signal' )
          echo "*** ${SVNAME}: killed on signal $5" ;;
      * )
          echo "*** ${SVNAME}: stopped ($3)" ;;
    esac
    exit 0
}


## branch to target:
eval ${TARGET} "$@"

### EOF

注意:执行程序要用exec,并且后面的程序不能后台自己(perp会自动后台改程序)

rc.log

示例:

#!/bin/sh

if test ${1} = 'start' ; then
  exec tinylog_run ${2}
fi

exit 0
### EOF

将记录进程的log到/var/log/进程名/current文件内。

2、设置环境变量

export PERP_BASE=/etc/perp
目的:perpls等工具,会根据env中的PERP_BASE找相应的配置文件,如果环境变量没有的话,将报:

perpls fatal: failure connecting to perpd control socket ./.control/perpd.sock: file does not exist (ENOENT)

3、启动perpd服务器

perp /etc/perp

4、配置完成,验证结果

一切正常的话,perpls就可以看到监视进程的运行状态了

perpd

作用

perpd是一个守护进程,用于接收,例如perpls/perpctl下发的指令,并按规则处理这些指令。

perpd运行时将扫描指定目录下的rc.log、rc.main文件,扫描到时,将切换到rc.main所在目录,并执行:

./rc.main start/stop/reset svname [ args...  ]

其中rc.log记录运行时的log,该文件可选。
rc.main包含启动、停止进程的规则,该文件必须存在。

使用

perpd /etc/perp &

上述会打印出perpd的运行log,如果想屏蔽可:

perpd /etc/perp > /dev/null 2>&1 &

只打印错误信息。

perpls

作用:显示监视的进程信息

# perpls 
[+ +++ ---]  perp_demo  uptime: 58242s/-s  pids: 262/-

解释:
[+ +++ —-]:运行面板,包含3部分,其后跟监视服务的名字,uptime:启动时间
面板第一部分:
+:正常启动并运行
-:该进程不被perpd监视或已停止且不被拉起
第二部分:
.:进程停止,如下所示:

# perpls 
[+ +++ ---]  perp_demo  uptime: 58242s/-s  pids: 262/-
# perpctl d perp_demo
perp_demo: ok
# perpd[261]: monitoring 0 client connections
*** perp_demo: killed on signal SIGTERM

# perpls
perpd[261]: monitoring 1 client connection
[+ ... ---]  perp_demo  uptime: -s/-s  pids: -/-

r: 表示进程起来后,短暂时间内会down掉,即表示进程被频繁拉起和退出,进程异常
p: 表示进程暂停
o: 标识进程只被执行一次
第三部分:
不用考虑

perpctl

作用:控制所监视的进程的状态
以下仅对常用法进行说明。

perpctl d

perpctl d 进程名:即d(down)掉进程,示例如下:

# perpls 
[+ +++ ---]  perp_demo  uptime: 58242s/-s  pids: 262/-
# perpctl d perp_demo
perp_demo: ok
# perpd[261]: monitoring 0 client connections
*** perp_demo: killed on signal SIGTERM

# perpls
perpd[261]: monitoring 1 client connection
[+ ... ---]  perp_demo  uptime: -s/-s  pids: -/-

perpctl u

perpctl u 进程名:即u(up)起进程,示例如下:

# perpls
perpd[261]: monitoring 1 client connection
[+ ... ---]  perp_demo  uptime: -s/-s  pids: -/-
# perpctl u perp_demo
perp_demo: ok
# *** perp_demo: starting perp_demo...
ss test

# perpls
[+ +++ ---]  perp_demo  uptime: 5s/-s  pids: 286/-

perpctl o

o(once),如果进程没有起来,则拉起,并标识它只被拉起一次,之后kill掉进程,它不会被拉起。

# perpls
[+ +++ ---]  perp_demo  uptime: 5s/-s  pids: 286/-
# perpctl o perp_demo
perp_demo: ok
# perpls
[+ +o+ ---]  perp_demo  uptime: 193s/-s  pids: 286/-
声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
阿帅
红包 2 1 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
阿帅
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区