Queimando cron tarefas até 10 vezes

3

Esse tipo de coisa toca em outro post que eu fiz, mas é diferente, então eu postei isso como uma nova pergunta.

Eu tenho um script que pode demorar um pouco mais de 1 minuto para processar, e meu cron está configurado para rodar a cada minuto. Eu posso parar outro cron job executando o script se o primeiro não tiver terminado usando flock (php) no arquivo, no entanto, isso significa que eu perderia uma iteração da rotina e teria que esperar quase um minuto antes desencadeada novamente (como meu entendimento me leva a acreditar).

O que eu gostaria de fazer é se o roteiro estiver trancado, não bombardear, mas espere. Com o tempo, no entanto, isso pode ficar muito alto, então eu também gostaria de limitar a quantidade de cron na fila para 10.

Eu sou um novato de verdade com o Linux (já tinha um VPS Linux por 3 dias), então não tenho certeza se minha solução é mesmo prática.

Obrigado.

    
por webnoob 21.02.2011 / 21:35

6 respostas

2

Eu diria que cada trabalho poderia criar um arquivo de bloqueio e aguardar o novo arquivo de bloqueio existente. Se a contagem de arquivos de bloqueio for 10, saia em vez de criar e aguardar.

    
por 21.02.2011 / 21:44
1

Por que é importante se uma única corrida falhar? Neste ponto, acho que você precisa ir além de um cron job e de um script.

Você está entrando em uma questão de programação aqui. Você poderia ter cada execução do script, se ele decidir esperar, ler um contador em um arquivo de texto e, em seguida, incrementá-lo enquanto espera e, em seguida, decrementá-lo quando ele finalmente for executado. Se o contador é lido para ser mais de 10, então você pode apenas sair. Mas agora você precisa garantir que nada tente ler ou escrever no balcão ao mesmo tempo.

Neste ponto, por que você não escreve isso como um daemon para que ele possa rastrear seu próprio estado? Você pode até querer escrevê-lo como servidor e cliente.

    
por 21.02.2011 / 21:46
1

Como outros apontaram, o cron não é a ferramenta certa aqui.

Coisas para observar com arquivos de bloqueio: * Você tem que ter certeza que eles estão limpos na saída ou reinicialização do servidor. Se o processo for eliminado e o arquivo de travamento for deixado, você poderá se deparar com uma situação em que nunca será executado, pois há 10 arquivos de bloqueio obsoletos. * Use um programa específico para arquivos de bloqueio ou use diretórios. mkdir terá erro se o diretório existir, o touch sempre retornará sucesso e você abrirá uma condição de corrida.

    
por 21.02.2011 / 22:50
0

Qual é a diferença na fila de 1 ou 10, uma vez que você começa a enfileirar, não é como se o seu cronjob acelerasse de repente e as coisas da fila fossem feitas em menos do que antes.

Eu diria que flocking e verificação é muito bem, se você realmente quiser fazer como você pediu, você pode implementar o próprio mecanismo de bloqueio e fila de processos, desde que eles leiam a partir de alguns arquivos menores que 10 ou algo.

Como o cronjob acorda; verifica se / tmp / count existe, se não echo 1 > / tmp / count se existe valor incremental de numero em / tmp / count; quando o script cronjob for concluído, decrementar o valor / tmp / count se o arquivo existir se decrementar de 1 a 0, apague o arquivo; quando você atingir uma contagem de 10 no arquivo, simplesmente saia do script.

    
por 21.02.2011 / 21:48
0

eu vou pular cron aqui. apenas monitore todos os arquivos e use-os quando eles não estiverem bloqueados, conforme necessário. isso é possível?

    
por 21.02.2011 / 21:54
0

Você poderia usar um programa chamado The Fat Controller. Funciona como o CRON, executando regularmente um script, porém, em vez de rodar a cada x minutos ou segundos, ele aguarda x minutos ou segundos a partir do momento em que o script termina antes de iniciá-lo novamente.

Ele também tem outros recursos, como:

  • executando várias instâncias de um script em paralelo
  • pode reiniciar imediatamente um script (ou seja, não espere) se o script disser
  • pode pausar se o script cometer erros

Dê uma olhada no webiste: www.4pmp.com/fatcontroller /

Há mais informações e casos de uso.

    
por 31.03.2011 / 13:49

Tags