如何控制runit服务的自动重启率?

jpb*_*chi 8 unix service runit

我有这个 runit 服务runlog/run脚本正常工作。

碰巧的是,服务本身可能会因外部原因而崩溃,并且可能在几分钟内无法启动。runit 处理这种情况的默认方式是每隔几秒钟重新启动服务。我该如何改变这种行为?

我的最后一个想法是添加一个check脚本并在那里做一些魔术,但这似乎比应该的要复杂得多。有没有更好更简单的方法?

Ave*_*yne 8

您应该在该./finish服务的文件中限制重新启动的速率,该服务在异常终止时运行。该./finish脚本./run将从那里接收返回代码,然后您可以确定要做什么等。就此而言,您应该让您的./finish脚本大声尖叫失败并发送通知并四处奔波……


小智 3

我不熟悉这个工具,但是,如果我的任务是解决这个问题,并且很短的手册页阅读没有提供一个简单的旋钮来调整这个行为,我会执行以下操作:

要么扩展现有的服务启动脚本,要么如果这很麻烦,则将新的启动脚本插入到链中(这又会启动原始的启动脚本)。新的启动脚本应该检查上次启动是否最近发生,而不是立即启动服务。这可以通过检查先前启动创建的信令文件来完成。如果该文件不存在,脚本可以继续触摸该文件并启动服务。如果文件存在,脚本应检查文件是否足够旧。如果它不够旧,它应该循环等待(睡眠),直到文件足够旧。

像这样的事情可能会起作用(重新启动之间至少等待 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...
Run Code Online (Sandbox Code Playgroud)