No entanto, não estou familiarizado com esse recurso, se foi minha tarefa resolver esse problema e uma leitura muito curta da página de manual não ofereceu um botão simples para ajustar esse comportamento, eu faria o seguinte:
Estenda o script inicial de serviço existente ou, se for complicado, insira um novo script inicial na cadeia (que, por sua vez, inicia o script inicial original). Em vez de iniciar o serviço imediatamente, o novo script de inicialização deve verificar se a última inicialização ocorreu recentemente. Isso pode ser feito verificando um arquivo de sinalização criado pelo início anterior. Se o arquivo não existir, o script poderá continuar, tocar no arquivo e iniciar o serviço. Se o arquivo existir, o script deve verificar se o arquivo tem idade suficiente. Se não tiver idade suficiente, deve esperar (inatividade) em um loop até que o arquivo fique velho o suficiente.
Algo assim pode funcionar (aguarda pelo menos 1 minuto entre as reinicializações):
#!/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...
Você deve limitar a taxa de reinicialização no
./finish
arquivo desse serviço, que é executado após o término anormal. O./finish
script receberá o código de retorno de./run
e para lá, você pode determinar o que fazer, etc. Nesse caso, você deve ter seu./finish
script gritando alto sobre as falhas, enviando notificações e pulando em chamas ...fonte
Eu realmente não sou um fã de gerenciamento de processos baseado em init (e runit é basicamente um substituto para init). Como você está descobrindo, a reinicialização simples de processos com falha assim que eles morrem não é uma estratégia particularmente boa. Eu usei o init para reiniciar o monit, mas isso é o mais longe possível. (potencialmente assassino OOM poderia matar monit).
Por isso, incentivo você a procurar uma substituição em vez de consertar as coisas.
Monit é bem velha, mas faz bem o trabalho, e não estou ciente de que algo melhor tenha surgido. Ele tem o bom recurso de não precisar armazenar mais memória após a inicialização, o que supera qualquer coisa escrita em uma linguagem de script. A última coisa que você deseja é que seu monitor de processo morra porque não consegue obter memória.
fonte