Usando o serviço gerenciado cron vs. sistema para tarefas frequentes

0

Se alguma tarefa for executada de maneira precisa, mas não necessária, quais seriam os benefícios de usar cron vs. apenas usando um serviço (por exemplo, gerenciado por upstart ) com um script de loop como

#!/bin/sh
while true
do
    do_task
    sleep 3600
done

?

Com o upstart de hoje, podemos selecionar o usuário com o comando setuid , e o upstart pode ser configurado para reiniciar o script se ele morrer, pará-lo se quiser, etc.

Existe algum benefício real de brincar com o cron nesta situação?

    
por dronus 20.02.2014 / 00:41

2 respostas

1

A execução do Cron é "mais pura". Para começar, serão necessários menos recursos - seu script consumirá recursos extras (a memória para o shell, o timer e os Processos e descritores de arquivos extra vêm à mente). Enquanto praticamente máquinas são insanamente poderosas, é apenas menos elegante.

O Cron também tem uma maneira elegante de lidar com o stdout - > email ou what-have-you, que pode ser útil para depuração.

Se você usa o Cron, não precisa de coisas com privs diferentes, apenas diga ao cron qual usuário usar.

Claro, usar o upstart tem algumas vantagens - por exemplo, você pode querer um grau de aleatoriedade nas esperas ou um cronograma de processamento que o Cron não gosta. Há momentos em que uma solução como essa é melhor do que Cron - mas eu acho que eles são casos especiais.

Se você vai querer iniciar e parar o processo e ter controle de usuário, por exemplo, o Upstart pode ser uma maneira melhor de ir.

    
por 20.02.2014 / 10:28
0

O cron é usado quando você quer que um processo seja executado em algum tempo absoluto preciso (por exemplo, 3:15 AM todos os dias ou a cada hora em X: 05 ou mais) enquanto seu script é relativo ao horário de início. No seu exemplo, ele será executado a cada hora a partir do momento em que você o iniciar, o que deve corresponder à sequência de inicialização. Então, se o seu PC inicializar às 1:05, você terá o seu trabalho feito a cada X: 05, enquanto que, se ele iniciar às 3:36, você terá seus trabalhos concluídos em X: 36.

Se você quer que seja feito aproximadamente uma vez por hora, então isso realmente não muda, mas é claro que pode ser executado em qualquer lugar entre o primeiro e o último minuto de uma hora, dependendo da inicialização. Na verdade, se o seu do_task é algo longo que leva muito tempo, ele pode acabar rodando menos que uma vez por hora (já que o sono é calculado no final da tarefa, então se do_task levar 30 minutos, o do_task será iniciado a cada 1 : 30 horas no seu caso)

Por outro lado, usando o cron se o seu sistema não estiver sempre ativo, você pode facilmente perder alguns eventos (já que eles são feitos exatamente quando a condição é exata). Nesse caso, o anacron é mais sugerido (já que parece apenas o tempo da última execução). Outra coisa é que o cron irá executar o job mesmo que a versão anterior ainda não tenha terminado, o que pode, em alguns casos, ser uma coisa boa ou ruim enquanto o seu script não irá.

Então, resumidamente, disse: se você precisa de um cron definido e sabe o tempo é geralmente melhor, se você só precisa de uma tarefa periódica sem horários específicos, então você pode ir para upstart.

    
por 20.02.2014 / 07:19