Eu daemonizo o script / processo e gerencio-o com Monit .
Isso lhe daria respawn e controle de processo, mas também permitiria executar / verificar o processo em um intervalo menor que o cron (por exemplo, 15 segundos)
Eu tenho uma caixa do CentOS 5.11 com a qual tenho que trabalhar agora - em um ambiente de produção em que não posso realmente colocá-la no CentOS 6, pelo menos por algum tempo. Eu tenho que ter baixo impacto neste projeto, não posso estragar esta caixa de produção.
Eu tenho um script, chame-o / my / foo. No momento, esse script é executado a partir do cron a cada 3 minutos - na verdade, ele é executado como:
* / 3 * * * * / my / foo myparam
O problema é que o script normalmente leva apenas alguns segundos para ser executado, então perdemos quase 3 minutos esperando. Mas, podemos APENAS ter uma instância em execução por vez (então, na verdade, já temos uma vulnerabilidade se uma anomalia causar uma execução de mais de 3 min). Ocasionalmente, o script pode ter muitas coisas para fazer e levar 2 minutos, portanto, temos um limite de 3 ou mais.
O que estamos realmente querendo é simplesmente garantir que uma, e apenas uma, instância deste script seja executada "indefinidamente" (loop) e, muito provavelmente, colocaremos um "sleep 30" lá apenas para evite que seja muito agressivo. O script em si não é um loop - é um script de uma passagem. Mas nós definitivamente perdemos muito tempo em 99% das circunstâncias, apenas executando a cada 3 minutos do cron. O 1% dos casos em que leva > 2 min significa que gastamos 99% dos casos esperando quando ele pode ser executado novamente e fazer mais trabalhos.
Então, nós achamos que poderia ser um hack decente para, por enquanto, colocá-lo no sistema init com um respawn. Lá, corre, termina, respawns (provavelmente com aquele pequeno sono no próprio script). Para sempre. Isso é resiliente (uma morte acidental do processo não significa que ele está morto para sempre, etc.).
Eu tenho visto muitas postagens sobre quase novatas, até mesmo alguns debates sobre seu futuro no CentOS 6, e assim por diante. Mas, novamente, eu tenho que estourar isso na caixa do CentOS 5 por enquanto - nós não temos o upstart e não o teremos em breve. Eu tenho que deslizar isso para esta caixa de produção com o que eu tenho ... e sem quebrar nada.
Eu vi o / etc / inittab meio poo poo'd, mas também foi notado que essa é a melhor maneira de obter respawn - o /etc/init.d/que se liga ao /etc/rc3.d/ o que e assim por diante, a maneira típica, não dá recursos respawn. Eu ainda não tenho certeza sobre isso - parece assim.
Dadas estas restrições, é melhor, e razoável, colocar nosso pequeno script no / etc / inittab com um respawn e ir embora?
Eu daemonizo o script / processo e gerencio-o com Monit .
Isso lhe daria respawn e controle de processo, mas também permitiria executar / verificar o processo em um intervalo menor que o cron (por exemplo, 15 segundos)