Soluções para agendar o cronjob

1

Eu configurei uma lista do cron, Alguns dos scripts do cron levam muito tempo para serem executados (como de 1 a 5 horas, e eles estão aumentando a cada dia). Eu não quero rodar dois scripts cron ao mesmo tempo, já que não tenho recursos ou necessidade para isso. Eu preciso encontrar uma solução para que os scripts agendados não iniciem até que o outro script anterior tenha terminado. Eu tenho 10-15 cron job na lista, onde eu não quero sobrepor 5 deles.

Alguém tem alguma sugestão sobre que tipo de solução eu deveria analisar mais de perto para alcançar meu objetivo?

    
por Shamsul 10.12.2012 / 11:21

5 respostas

2

Crie um arquivo de bloqueio temporário que será usado pelo script enquanto ele estiver em execução, se o novo script encontrar esse arquivo, ele será interrompido.

i.e.

if [ -a lockfile ]; then
exit 0
else
touch lockfile
fi
... rest of code...
rm -f lockfile

Verifique com o script se outro já está sendo executado como ps auxwf | grep blabla.

    
por 10.12.2012 / 13:12
1

O uso da abordagem de arquivo de bloqueio pode levar a situações em que o cronjob diário não será iniciado. Você já pensou em executar essas tarefas a partir de um cron de trabalho sequencialmente

#!/bin/bash/
sh /jobs/somejob1
sh /jobs/somejob2

Eu recomendo a execução de aplicativos pesados de i / o sequencialmente de um trabalho

    
por 10.12.2012 / 15:41
0

Você pode trabalhar com arquivos de bloqueio no PHP também. Eu resolvi exatamente o mesmo problema com o código:

$lockfile='/tmp/'.__CLASS__.'.lock'; // the lockfile should be different for each script
$lock=fopen($lockfile, 'w');
if(!flock($lock, LOCK_EX|LOCK_NB)){
//  $this->log("This process is already started, i'm exiting.");
    exit;
}

Coloque isso no início do seu script de trabalho.

    
por 10.12.2012 / 15:28
0

Existe um pacote chamado lockfile-progs disponível em qualquer distribuição derivada do Debian (e provavelmente outra), e funciona.

    
por 10.12.2012 / 16:04
0

O mesmo tópico surgiu no Sysadvent no início deste mês: link

Você pode usar o Zookeeper como um gerenciador de bloqueio distribuído para arquivos de bloqueio em um cluster de máquinas.

    
por 10.12.2012 / 16:43