Um trabalho de crontab pode ser executado simultaneamente com ele mesmo?

4

Se eu tiver um trabalho de crontab executado, por exemplo, a cada hora, mas esse trabalho levar mais de uma hora para ser concluído, a próxima tarefa não será executada?

    
por paradroid 14.12.2012 / 10:51

2 respostas

8

Não, os scripts cron são executados paralelamente, se você não implementar alguns mecanismo de travamento.

Veja Maneira rápida e suja de garantir que apenas uma instância de um script de shell esteja sendo executada por vez e Bloqueio correto em shell scripts? para possíveis soluções.

Uma maneira mais simples é usar lockfile , como nesta resposta ou o pacote run-one (veja esta resposta ) - graças a gertvdijk por sugerir isso.

    
por 14.12.2012 / 11:00
2

Há também whenjobs que pretende ser "um poderoso, mas simples substituto do cron" . De sua página de manual :

PRE FUNCTIONS

Before a job runs, you can arrange that a "pre" function is called. This function may decide not to run the job (by returning "false").

One use for this is to prevent a particular job from running if there is already an instance of the same job running:

job "only one"
pre (Whentools.one ())
every 10 seconds :
<<
  # Takes longer than 10 seconds to run, but 'Whentools.one ()'
  # will ensure only one is ever running.
  sleep 11
>>

(Ele também fornece Whentools.max n , permitindo que n instâncias do trabalho sejam executadas. Por padrão, funciona como o Cron.)

    
por 14.12.2012 / 11:07

Tags