Agendamento de tarefas usando o crontab, o que acontecerá quando o computador for desligado durante esse período?

85

Eu agendo algumas tarefas usando o crontab.

O que acontecerá se meu computador for desligado ou desligado durante o horário em que o cron foi programado para fazer alguma coisa?

Cada trabalho cron perdido é executado depois que o computador é ligado ou os trabalhos perdidos daquele dia são ignorados? Se os trabalhos perdidos não forem retomados, existe alguma maneira de configurar o cron para que ele execute as tarefas perdidas após o computador ser ligado novamente?

seg.server.fault
fonte
3
Eu tentei procurar um tutorial anacron na web, mas não consegui encontrar nenhum bom. Olhar para páginas de manual também não me ajudou muito. Como posso alterar o crontab já existente para que seja alterado para anacron? Ou qualquer tutorial neste será muito útil
seg.server.fault
11
Editei minha resposta para incluir alguns exemplos. Espero que ajude!
22410 jeff

Respostas:

70

Quando o computador é desligado (ou o daemon cron não está em execução), os trabalhos cron não serão iniciados.

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

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

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

deixando os crontabs restantes para serem tratados pelo daemon cron principal, especificamente:

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

NOTAS

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

Na caixa do Ubuntu 8.04 que estou vendo, /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 possui um pouco mais de informações do que as contidas nas páginas de manual.

EXEMPLOS

Para trabalhos simples "diariamente", "semanalmente", "mensalmente", 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 o seu computador estiver desligado no dia em que os scripts "semanais" normalmente rodariam, ele será executado na próxima vez 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 "falhe" na execução no dia 3, você usaria isso em / etc / anacrontab (não se esqueça de remover a linha do / 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 aguardará 5 minutos antes de executar este trabalho. A idéia é impedir que o anacron ative as coisas imediatamente no momento da inicialização.

jeff
fonte
5
Por padrão, o Ubuntu usa anacron.
3dinfluence
11
obrigado, 3dincluence - resposta ajustada para indicar quais crontabs são manipulados pelo anacron em um conjunto padrão do ubuntu.
10139 jeff
2
se você colocar o script em /etc/cron.*/ em vez de ter sua própria entrada crontab, não use "." no nome do arquivo do script. O debian e o ubuntu usam run-parts para executar tais scripts e, por padrão, run-parts irá ignorar arquivos com a. no nome do arquivo - para que ele não execute as versões .dpkg-old e .dpkg-dist dos scripts que são renomeados a partir das atualizações. então chame o script ou o link simbólico de "maint" em vez de "maint.sh".
10282
O OpenSUSE usa o cronie por padrão a partir da 11.2 em diante (atualmente para o Tumbleweed / Leap 42.2). Para usar anacron, instale o cronie-anacronpacote.
Palswim
13

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

Tyler McHenry
fonte
5

As tarefas agendadas com o computador desligado não serão executadas quando o computador for ligado novamente.

Alan H
fonte
2

Se você desligar enquanto os trabalhos do cron estiverem em execução, o sistema será encerrado e os trabalhos do cron serão interrompidos (ou não serão executados).

Uma alternativa que você pode verificar é o anacron.

KPWINC
fonte
2

Realmente depende do cron deamon que você está executando. O Vixie-cron irá simplesmente pular cronjobs perdidos. O fcron executará os componentes perdidos o mais rápido possível. O IIRC também é baseado no vixie-cron, portanto, se é isso que você está procurando, você pode conferir o fcron.

gregf
fonte