原进程启动方式,通过/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