Job scheduling usando crontab, o que acontecerá quando o computador for desligado durante esse tempo?

74

Eu programo algumas tarefas usando o crontab.

O que acontecerá se meu computador for desligado ou desligado durante o horário em que o cron estava agendado para fazer algo?

Será que cada trabalho cron não executado é executado depois que o computador é ligado ou os trabalhos perdidos para esse dia são ignorados? Se as tarefas perdidas não forem retomadas, existe alguma maneira de configurar o cron de modo que ele execute as tarefas perdidas depois que o computador for ligado novamente?

    
por seg.server.fault 10.08.2009 / 18:22

5 respostas

62

Quando o computador está desligado (ou o daemon cron não está sendo executado), os trabalhos agendados não serão iniciados.

Se você tem trabalhos que gostaria de executar após o ocorrido durante os períodos em que o computador é desligado, use anacron. Instalado por padrão, veja "man anacron", "man anacrontab", ou o arquivo / etc / anacrontab para mais informações.

O Ubuntu usa anacron por padrão para entradas do crontab em:

/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly

deixando os demais crontabs para serem manipulados pelo daemon principal, especificamente:

/etc/crontab
/etc/cron.d
/var/spool/cron

NOTAS

O próprio Anacron não é executado como um daemon, mas depende de scripts de inicialização do sistema e do próprio cron para ser executado.

Na caixa do Ubuntu 8.04, o /etc/init.d/anacron é executado na inicialização e novamente pelo cron todas as manhãs às 07:30.

O README em /usr/share/doc/anacron/README.gz tem um pouco mais de informação do que as páginas de manual.

EXEMPLOS

Para tarefas simples "diárias", "semanais", "mensais", coloque uma cópia ou um link simbólico no script em um dos diretórios /etc/cron.{daily|weekly|monthly} acima. O Anacron cuidará de executá-lo diariamente / semanalmente / mensalmente, e se seu computador estiver desligado no dia em que os scripts "semanais" normalmente seriam executados, ele os executará na próxima vez em que o computador estiver ligado.

Como outro exemplo, supondo que você tenha um script aqui: /usr/local/sbin/maint.sh

E você deseja executá-lo a cada três dias, a entrada padrão em / etc / crontab seria assim:

# m h dom mon dow user  command
0 0 */3 * * root /usr/local/sbin/maint.sh

Se o seu computador não estivesse ligado às 00:00 do dia 3 do mês, o trabalho não seria executado até o dia 6.

Para que o trabalho seja executado no dia 4 quando o computador estiver desligado e "perder" a execução no terceiro, você o usaria em / etc / anacrontab (não se esqueça de remover a linha do arquivo / etc / crontab):

# period delay job-identifier command
3 5 maint-job /usr/local/sbin/maint.sh

O "atraso" de "5" acima significa que o anacron esperará 5 minutos antes de executar este trabalho. A ideia é evitar que o anacron dispare imediatamente no momento da inicialização.

    
por 10.08.2009 / 18:26
13

Isso depende de qual agendador de cron você usa. O daemon do kernel vanilla básico não executará tarefas que foram perdidas devido ao tempo de inatividade do sistema. No entanto, existem outros agendadores de cron projetados especificamente para essa situação, que farão isso por você. Os dois exemplos mais comuns são anacron e fcron .

    
por 10.08.2009 / 18:27
5

As tarefas programadas enquanto o computador está desligado não serão executadas quando o computador for ligado novamente

    
por 10.08.2009 / 18:26
2

Se você desligar enquanto as tarefas agendadas estiverem em execução, o sistema será encerrado e as tarefas agendadas serão interrompidas (ou não serão executadas).

Uma alternativa que você pode verificar é anacron.

    
por 10.08.2009 / 18:27
2

Realmente depende do deamon do cron que você está executando. Vixie-cron irá simplesmente ignorar os cronjobs que foram perdidos. O fcron executará crons perdidos assim que possível. O IIRC é baseado no vixie-cron também, então se é isso que você está procurando, você pode querer verificar o fcron.

    
por 10.08.2009 / 18:35