openwrt添加守护进程
开始
以podsync为例:
———————————————podsync———————————————
#!/bin/sh /etc/rc.common
#使用procd启动
USE_PROCD=1
#执行的顺序,按照字符串顺序排序并不是数字排序
START=95
STOP=01
SERVICE=podsync
PROC="/mnt/nvme0n1p3/podsync/podsync --config /mnt/nvme0n1p3/podsync/config.toml"
start_service() {
echo "podsync start..."
#创建一个实例, 在procd看来一个应用程序可以多个实例
procd_open_instance
#执行想要执行的命令或脚本
procd_set_param command $PROC
#进程意外退出的重启机制及策略
procd_set_param respawn
#关闭实例
procd_close_instance
}
stop_service() {
local pid=""
pid=`ps -ef | grep podsync | grep "config.toml" | grep -v grep| awk '{print $1}'`
if [ "${pid}" != "" ];then
kill -9 ${pid}
fi
}
restart() {
stop
start
}
———————————————podsync———————————————
该脚本放置在/etc/init.d/
目录中。
必须指出来的是,被procd执行的程序不能是daemon后台程序,也不能使用nohup执行脚本,因为后台程序的主进程退出后在procd看来就是程序退出了,然后会进入respawn流程,之后重复启动和退出。
函 数 含 义
start_service
向 procd 注册并启动服务,是将在 services 所管理对象里面增加了一项stop_service
让 procd 解除注册,并关闭服务, 是将在 services 中的管理对象删除service_triggers
配置文件或网络接口改变之后触发服务重新读取配置service_running
查询服务的状态reload_service
重启服务,如果定义了该函数,在 reload 时将调用该函数,否则再次调用 start 函数service_started
用于判断进程是否启动成功
#加入开机启动
service podsync enable
#检验是否开机启动成功
ls -la /etc/rc.d/po*
#关闭开机启动
service podsync disable
#启动命令
service podsync start