Arquivo crontab dinâmico?

Arquivo crontab dinâmico?

É possível fazer com que o cron receba instruções da saída de um script de shell em vez de ler um arquivo estático?

Estou tentando gerenciar crontabs em várias máquinas e manter arquivos crontab separados para cada máquina é uma tarefa árdua. Gostaria que o cron executasse um script de shell que imprimisse linhas crontab para cada trabalho com base no fato de uma determinada máquina estar atribuída a esse trabalho. Posso fazer isso?

PS- Já vi alguns sugerirem Puppet/Chef/etc. para esse propósito, mas acho que é um exagero lidar apenas com esse problema.

Responder1

Acho que a maneira mais fácil de fazer isso na maioria das distribuições seria usar ferramentas de implantação automatizadas como Puppet/Chef, bem como o diretório /etc/cron.d. Você pode colocar crontabs nesse diretório, exceto que eles usam o seguinte formato em vez do formato típico:

* * * * * <user> <command>

Onde está o usuário que executará o cron.

Você parece achar que o Puppet é um exagero (não é), mas a parte do diretório também se aplicaria a qualquer outra solução.

Responder2

Sim, claro que você pode fazer isso. Basta configurar qualquer script necessário para produzir a saída do crontab e enviá-lo para os servidores de destino.

Lá, um cron job estático pode ler especificamente esses crontabs para execução, de qualquer local que for conveniente.

Responder3

Este é exatamente o uso pretendido para fantoches e amigos.

Sua única entrada no crontabpoderia ser executar o agente fantoche, se você não gostar de como ele é configurado pelo gerenciamento de pacotes da sua distribuição.

O script externo estaria no puppet-master. Em um lugar. Para todas as máquinas.

Se for um problema suficiente considerar o uso de um script externo, recomendo o puppet. O Chef certamente pode fazer algo semelhante.

Comecei com o puppet apenas para gerenciar ~/.ssh/authorized_keysem várias máquinas, o que é um "pequeno" problema semelhante.

Responder4

Um truque popular é criar uma entrada no crontab que atualize todo o crontab. Isso funcionará bem, desde que seu script de shell nunca alimente dados incorretos crontab.

No entanto, sugiro uma abordagem diferente que será mais fácil de gerenciar: tenha uma entrada estática no crontab que execute um script com frequência. Faça com que o script faça todo o trabalho pesado para descobrir quando é hora de executar algo. Dessa forma, você ainda pode usar o crontab como um crontab normal sem precisar informar ao script tudo o que pode estar sendo executado em cada máquina.

informação relacionada