Quais alternativas existem para o cron executar tarefas agendadas?

3

Estamos usando o cron para gerenciar nossos backups e outros trabalhos em vários locais. Usar o chef para preencher arquivos no cron.daily, cron.hourly, etc funcionou muito bem para nós até agora, mas com alguns problemas:

  • Eu não quero ter que gerenciar um servidor de e-mail no sistema apenas para receber a saída do cron
  • Eu quero colocar a saída em meus trabalhos agendados sem receber e-mails sobre eles se nada der errado
  • Eu não quero ter que verificar / var / log / messages para ver se as tarefas falharam sem saída
  • Eu não quero ter que fazer login no sistema para descobrir que a tarefa de backup ainda está em execução

Idealmente, eu gostaria de um front-end baseado na web que eu possa usar para ver essas informações, seja como uma extensão no cron ou uma substituição completa.

Eu mesmo posso resolver os problemas acima com um pouco de script, mas tenho certeza de que esse é um problema que outros já resolveram.

Note que reconheço que este é um problema completamente separado da verificação dos backups depois de concluídos.

    
por Michael Pearson 30.08.2011 / 01:52

4 respostas

1

Você pode usar o Resque - com sua interface da Web incorporada - para gerenciar tarefas. Confira o Resque Railscast para vê-lo em ação.

Em seguida, use o ruby gem resque-scheduler para adicionar trabalhos às filas em horários programados.

Há uma boa postagem no blog sobre isso: "Tarefas do Cron para sua aplicação Rails com o Resque"

    
por 30.08.2011 / 04:11
1

Talvez isso não seja um ajuste perfeito para o que você procura, mas minha abordagem mais recente para isso foi a combinação de duas gemas de Ruby e um serviço da Web.

Em primeiro lugar, a gem sempre , que fornece uma interface ruby limpa para o agendamento de tarefas agendadas (assim, não uma substituição do cron, apenas uma camada por cima).

Em seguida, está a gem backup , que fornece um conjunto sólido de ferramentas para gerenciar backups com bastante precisão (inclusive em locais de armazenamento em nuvem ). O backup também enviará um e-mail quando as tarefas falharem e / ou tiverem sucesso (cabe a você configurar).

A peça final do quebra-cabeça é SendGrid - e enquanto eles pressionam seus planos pagos, eles têm um plano gratuito que permite 200 e-mails um dia. Eu certamente não estou chegando perto de taxar seus servidores para este script, então me serve bem. Pode demorar algumas horas para que eles confirmem uma conta, mas, depois de configurada, não tive problemas.

Feliz em compartilhar alguns scripts de exemplo, se desejar.

    
por 30.08.2011 / 02:42
1

Parece que o que você quer não é uma substituição de cron , mas sim um sistema de backup ( como Bacula ).
Veja minhas respostas para seus pontos individuais abaixo.

I don't want to have to manage a mailserver on the system just to receive cron output

Você não precisa usar cron . Como outros salientaram, você pode executar o SSMTP ou uma instância de sendmail somente para envio (apenas um corredor de fila). Alternativamente, você pode redirecionar sua saída cron para um arquivo, ou syslog, ou canalizá-la para qualquer outro programa que você queira manipular.

I want to be able to put output in my cron jobs without receiving email about them if nothing went wrong

De acordo com o acima, você pode canalizar sua saída cron para um programa manipulador, logger, etc. - você NÃO TEM que receber mensagens do cron, é exatamente assim que ela é configurada por padrão ...

I don't want to have to check /var/log/messages to see if jobs failed without output

Isso depende de como o seu software de backup funciona (e da capacidade de produzir entradas de log ou saídas analisáveis para que você possa alimentá-lo por meio de um script e enviar mensagens conforme necessário.) Um sistema de backup "real" fornecerá essas informações para você por meio de suas ferramentas de console / monitoramento, e poderá até enviar um email se precisar de atenção durante um trabalho.

I don't want to have to log in to the system to find that the backup job is still running

Mais uma vez, isso depende mais do seu software de backup. O Bacula e outros programas de backup dedicados permitem monitorar o status dos agentes em cada máquina cliente a partir de um console central, para que você não precise efetuar login nos clientes individuais para verificar seu status. O Bacula tem uma interface baseada na web, embora eu não possa garantir: uso o programa de console da linha de comando.

Nada disso realmente ajuda com seus "outros trabalhos" (como você apontou, sua saída pode ser manipulada com minhas anotações dos dois primeiros pontos mais "um pouco de script"), mas usando um padrão, bem conhecido Um software como o cron facilitará a manutenção a longo prazo.

    
por 30.08.2011 / 02:34
0

Você pode tentar um agendador de tarefas estruturado para gerenciar tarefas nos seus sistemas. Algo como o Open Source Job Scheduler funcionaria bem para isso. O benefício é que você teria um console central para gerenciar as coisas, um método para lidar com a verificação de dependência e uma maneira correta de executar novamente ou iniciar tarefas corretamente no caso de uma janela de trabalho perdida.

    
por 30.08.2011 / 02:02