Arquivo crontab dinâmico?

1

É possível fazer o cron receber suas 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 separados de crontab para cada máquina é uma tarefa árdua. Gostaria que o cron, em vez disso, executasse um script de shell que imprimisse linhas crontab para cada trabalho com base em se uma determinada máquina estava atribuída a esse trabalho. Posso fazer isso?

P.S.- Eu vi alguns sugerem Puppet / Chef / etc. para este propósito, mas eu acho que é um exagero para lidar com este problema.

    
por spiffytech 19.10.2012 / 17:12

4 respostas

1

Acho que a maneira mais fácil de fazer isso na maioria das distribuições seria usar ferramentas de implantação automatizadas, como o 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 Puppet é um exagero (não é), mas a parte do diretório também se aplica a qualquer outra solução.

    
por 19.10.2012 / 17:25
0

Sim, claro que você pode fazer isso. Basta configurar o script que você precisa para produzir a saída do crontab e scp-lo para os servidores de destino.

Lá, uma tarefa cron estática pode então ler especificamente os crontabs para executar, de qualquer lugar que seja conveniente.

    
por 19.10.2012 / 17:23
0

Este é exatamente o uso pretendido para marionetes e amigos.

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

O script externo estaria no mestre dos fantoches. Em um lugar. Para todas as máquinas.

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

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

    
por 19.10.2012 / 17:28
0

Um truque popular é fazer uma entrada crontab que atualize todo o crontab. Isso funcionará bem, contanto que seu script de shell nunca forneça dados ruins para crontab .

No entanto, sugiro uma abordagem diferente, que será mais fácil de gerenciar: tenha uma entrada crontab estática que execute um script com frequência. Faça o script fazer todo o trabalho pesado de descobrir quando é hora de executar alguma coisa. Dessa forma, você ainda pode usar o crontab como um crontab regular sem ter que fazer com que o script fique sabendo de tudo que poderia estar rodando em cada máquina.

    
por 19.10.2012 / 17:35

Tags