Openwrt启动项修改为procd管理

it2024-02-01  74

原进程启动方式,通过/etc/ini.d/hostapd启动。

启动脚本:

#!/bin/sh /etc/rc.common START=15 boot() { if [ -e "/var/run/hostapd-global.pid" ] then kill $(cat /var/run/hostapd-global.pid) &> /dev/null rm /var/run/hostapd-global.pid &> /dev/null fi hostapd -g /var/run/hostapd/global -B -s -P /var/run/hostapd-global.pid }

因为这种启动方式的进程,是作为Daemon进程常驻后台,如果出现挂死,则也不会被重启。

为了解决这个问题,计划将这个启动方式调整为procd管理。

#!/bin/sh /etc/rc.common START=15 USE_PROCD=1 PROG="/usr/sbin/hostapd" start_service(){ procd_open_instance if [ -e "/var/run/hostapd-global.pid" ] then kill `pidof hostapd` &> /dev/null rm /var/run/hostapd-global.pid &> /dev/null fi procd_set_param command $PROG -g /var/run/hostapd/global -s -P /var/run/hostapd-global.pid procd_set_param respawn procd_set_param limits core="unlimited" echo "/tmp/log/%e.%p.%s.%t.core" > /proc/sys/kernel/core_pattern procd_close_instance }

对于上面的调整,主要说明一下修改:

添加 USE_PROCD=1 ,将进程启动方式调整为PROCD

procd方式创建服务,通过command命令启动时,删除了 -B(daemon)。

测试中发现添加该参数,会导致出现启动多个进程。(测试中发现有5个)。

同时,添加该参数后,手动kill掉进程后,无重启操作。

猜测原因: 作为后台daemon进程时,脱离了procd的管理。所以无法生效。

设置了core文件生成名称。

修改过程中,因为添加了PROCD管理启动,测试了是否影响了启动顺序。

经过验证,对启动时间无影响,均为procd启动,只是之前的启动方式不会由procd来管理。后面的启动方式是通过procd管理的。

注意事项

​ 今天在测试procd重启进程时,发现重启5次之后,第6次进程被kill掉是没有重启的。

​ 查看了资料,设置respawn时,有参数配置这个重启次数,默认是5次。如果没有配置,那就是按照默认值处理。

​ 这也就是我这边重启5次之后procd再没有重启的原因。

参考资料

10-Openwrt procd守护进程: https://www.jianshu.com/p/acd2ccb5ea8d OpenWrt开发:25—软件模块之procd: https://blog.csdn.net/qq_41453285/article/details/102622557 openwrt监控程序(守护进程): https://www.cnblogs.com/cxt-janson/p/13084128.html OpenWrt的开机启动服务(init scripts): https://www.cnblogs.com/milton/p/6345621.html OpenWrt开发:17—软件启动机制: https://blog.csdn.net/qq_41453285/article/details/102545624 openwrt创建procd守护进程注意事项: https://blog.csdn.net/kakabuqinuo/article/details/98200884

最新回复(0)