我有这个runit服务,运行和日志/运行脚本正常工作.
碰巧的是,服务本身可能因外部原因而崩溃,并且可能无法启动很长时间. runit处理这种情况的默认方式是每隔几秒重新启动一次服务.我该如何改变这种行为?
我不熟悉这个设施,但是,如果我的任务是解决这个问题,并且一个非常简短的手册页阅读没有提供一个简单的旋钮来调整这种行为,我会做以下事情:
扩展现有的服务启动脚本,或者如果这很麻烦,请在链中插入一个新的启动脚本(然后启动原始启动脚本).新的启动脚本应该检查最后一次启动是否最近发生,而不是立即启动服务.这可以通过检查先前启动创建的信令文件来完成.如果该文件不存在,脚本可以继续并触摸该文件并启动该服务.如果文件存在,脚本应检查文件是否足够大.如果它还不够大,它应该在循环中等待(休眠),直到文件变得足够大.
这样的东西可能会起作用(重启之间至少等待1分钟):
#!/bin/bash SIGNALDIR=/tmp SIGNALFILE=service.started while /bin/true; do found=`find "${SIGNALDIR}" -maxdepth 1 -name "${SIGNALFILE}" -mmin -1 | wc -l` [ "${found}" -eq 0 ] && break echo "Waiting" sleep 10 done touch "${SIGNALDIR}/${SIGNALFILE}" original service start...