Não executa o cron job se já está rodando

4

Eu sei que essa pergunta já foi feita, mas eu não entendi a resposta ou não se aplicava a mim.

Eu tenho um script php que estou chamando a cada 1 minuto usando o CPanel para configurar o Cron Job. A natureza do script significa que ele pode ser invadido por pouco tempo, então eu preciso saber como parar o próximo se o primeiro não tiver sido concluído.

Eu tenho um VPS rodando o CENTOS 5.5 e tenho acesso ao WHM e ao CPanel. Eu nunca usei o Linux antes (só recebi o servidor ontem), então não tenho idéia do que estou fazendo e gostaria de receber ajuda, se possível. Se eu precisar fornecer mais informações, por favor me avise (não sei de que informações você precisaria no momento).

Obrigado.

    
por webnoob 19.02.2011 / 22:06

3 respostas

4

Por favor, veja Process Management . Você provavelmente desejará usar um arquivo de bloqueio. Você pode usar flock por exemplo.

Por que você não pode deixar seus trabalhos completos?

Suas perguntas dizem "Eu não entendi a resposta ou não se aplicava a mim", mas você não diz de que maneira. Por favor, seja mais específico.

    
por 19.02.2011 / 23:27
5

Use um script bash como seu cron job

cron.sh

#!/bin/bash
$lockfile=/tmp/lock.file

if [ ! -e $lockfile ]; then
   touch $lockfile
   php /path/to/php/script.php
   rm $lockfile
else
   echo "script already running"
fi
    
por 20.02.2011 / 01:23
0

Estou curioso para saber se implementar algo com ps resolverá o problema. Seria simples ps -e | grep script_name.php | awk '{print $4}' ser suficiente? Definitivamente vai dizer se o script está sendo executado, não há necessidade de verificar se alguém o matou antes. Como criar e remover um arquivo de bloqueio é melhor / mais rápido do que isso?

Não tenho certeza, apenas quero saber os prós e contras. Obrigado

    
por 20.02.2011 / 20:00

Tags