Bloqueia os daemons iniciados do script

1

Eu estou executando um script com o cron:

*/10 * * * * flock -n /tmp/lock script

Eu tenho que ter certeza de que apenas uma instância do script está sendo executada ao mesmo tempo e, para isso, estou usando o flock. O problema é que às vezes este script inicia um daemon, neste caso, o daemon bloqueia as seguintes execuções de script.

Eu sei que uma possível solução seria destravar o arquivo no final do script, mas é possível fazê-lo diretamente no comando cron?

    
por José Luis 16.02.2013 / 11:27

1 resposta

0

Parece que você quer manter seu daemon em execução pelo cron. Se sim, não é uma boa ideia. Por que esse bando às vezes falha? Você usa o diretório / tmp. Talvez outro processo remova arquivos antigos. Quando isso é feito, o bando ainda mantém arquivos flocados, mas apagados. Em outra rodada de cron de 10 minutos, outra instância flock não vê este arquivo, cria outro e executa uma cópia desnecessária. Resolução, mova seu arquivo de bloqueio para o diretório / var / run ou para outro local. Se o seu daemon geralmente terminar de funcionar, considere os códigos de saída. Atribuir algum código de saída para o sinal INT15. Execute o seu daemon a partir de um loop 'infinito'. Esse loop deve detectar, seu daemon é morto por sig15 ou outro. quando outro, simplesmente outro loop. se 15, deixe o loop e termine seu daemon ao vivo. você pode usar o pacote runsv, disponível em debian e redhat. funciona completamente diferente do cron. ele executa seu script / daemon executável e aguarda que ele termine ou trave. quando isso acontecer, reinicie-o. Então você não precisa prestar atenção para executar duas vezes seu código, e pode terminar o jogo com o cron, porque o cron não é para esse trabalho.

    
por 05.08.2014 / 12:53