trabalho cron executando repetidamente, por quê?

1

Por que esse cron job está sendo executado repetidamente ao longo do tempo e o que posso fazer para pará-lo?

Eu tenho um cron job que deve ser executado às 4h todas as manhãs. Ele atinge um script php que executa algumas análises diárias de dados e, em condições normais, é executado uma vez (leva cerca de 2 a 3 minutos para ser concluído) e é encerrado. Ele tem funcionado, mas ultimamente está funcionando bem na hora em que o servidor trava. Eu investiguei e encontrei o seguinte. A entrada crontab tem esta aparência:

* 4 * * * /usr/bin/wget -q -O /dev/null 'http://123.456.78.90/index/thing?param=1'

No meu arquivo de log eu vejo:

123.456.78.90 - - [28/Nov/2012:04:00:01 -0800] "GET /index/thing?param=1 HTTP/1.0" 200 4181 "-" "Wget/1.12 (linux-gnu)"
123.456.78.90 - - [28/Nov/2012:04:01:01 -0800] "GET /index/thing?param=1 HTTP/1.0" 200 4181 "-" "Wget/1.12 (linux-gnu)"
123.456.78.90 - - [28/Nov/2012:04:02:01 -0800] "GET /index/thing?param=1 HTTP/1.0" 200 4181 "-" "Wget/1.12 (linux-gnu)"
// and then later it ends with (note that it isn't trying every minute now)
123.456.78.90 - - [28/Nov/2012:05:28:09 -0800] "GET /index/thing?param=1 HTTP/1.0" 200 4182 "-" "Wget/1.12 (linux-gnu)"
123.456.78.90 - - [28/Nov/2012:05:29:36 -0800] "GET /index/thing?param=1 HTTP/1.0" 200 4182 "-" "Wget/1.12 (linux-gnu)"
123.456.78.90 - - [28/Nov/2012:05:29:00 -0800] "GET /index/thing?param=1 HTTP/1.0" 200 4182 "-" "Wget/1.12 (linux-gnu)"
123.456.78.90 - - [28/Nov/2012:06:06:51 -0800] "GET /index/thing?param=1 HTTP/1.0" 200 4181 "-" "Wget/1.12 (linux-gnu)"
123.456.78.90 - - [28/Nov/2012:06:06:53 -0800] "GET /index/thing?param=1 HTTP/1.0" 200 4181 "-" "Wget/1.12 (linux-gnu)"

Por que isso mostraria execuções repetidas como essa? Não está alcançando algo, então continua tentando? Qualquer ajuda é apreciada, já que essa coisa de múltiplas corridas é nova para mim.

    
por Lothar_Grimpsenbacher 28.11.2012 / 18:26

3 respostas

6

Parece que você está correndo a cada minuto da quarta hora do dia. Então, 60 cópias do wget estão sendo disparadas.

* 4 * * * .....

Eles então pegam o tempo que levam. Com 60 cópias em execução, provavelmente há algum tempo, explicando por que algumas solicitações terminam horas depois.

Se você realmente quer que ele seja executado apenas uma vez exatamente às 4h da manhã, use:

0 4 * * * .....
    
por 28.11.2012 / 18:33
3

Se você quiser que o wget seja executado todos os dias às 4 da manhã, sugiro alterar seu trabalho do cron para ficar assim:

0 4 * * * /usr/bin/wget -q -O /dev/null 'http://123.456.78.90/index/thing?param=1'

link

Sugiro corrigir isso primeiro e, em seguida, informar se você ainda está vendo um problema. Obrigado.

    
por 28.11.2012 / 19:45
1

link

Wget has been designed for robustness over slow or unstable network connections; if a download fails due to a network problem, it will keep retrying until the whole file has been retrieved. If the server supports regetting, it will instruct the server to continue the download from where it left off.

Eu suspeitava que fosse o tempo limite (o padrão é 900 segundos) e a nova tentativa.

    
por 28.11.2012 / 18:31