Como posso gerenciar meu crontab de forma eficaz para evitar problemas com múltiplas atualizações por vários usuários?

Como posso gerenciar meu crontab de forma eficaz para evitar problemas com múltiplas atualizações por vários usuários?

Eu tenho um crontab que inclui muitos usuários atualizando-o. O problema é que por causa disso não é fácil saber quem fez qual modificação em um cronjob.

Eu estava pensando em criar um script para fazer um diffcrontab com uma versão salva anteriormente para pelo menos poder ver o que foi alterado, mas pensei que talvez exista uma solução padrão para isso. Qual é a melhor abordagem para gerenciar meu crontab?

Responder1

Subversão

Eu colocaria o conteúdo do crontab sob controle do Subversion e concederia acesso apenas a esse usuário por meio de sudo. Especificamente, eu só permitiria que as pessoas acessassem o comando sudoa que tiraria o comando do subversion e o instalaria como o crontab mais recente para esse usuário específico. Isso fornecerá a você o seguinte:

  • Uma trilha de auditoria de quem fez o quê
  • A capacidade de reverter para um arquivo crontab anterior se surgir um problema
  • Isole os operadores de terem muita permissão para esta conta especial

Pode parecer muito complicado, mas não há nada muito complicado com o que descrevi se você dividir em pequenos pedaços.

MultiCron

Outra abordagem seria usar uma ferramenta/script comoMultiCron. Esta ferramenta permitiria gerenciar os dados do crontab externos à entrada do crontab para que você pudesse controlar melhor quem/quando tem acesso a essas alterações.

Exemplo usando Subversion

Supondo que você configure um repositório SVN, você poderia criar uma sudoentrada que permitiria aos usuários fazer algo assim:

$ sudo deploy_app_cron.bash

As entranhas deste script poderiam fazer, entre outras coisas, o seguinte:

svn cat file:///home/saml/svnrepo/app_cron_data.txt | crontab -u saml -

O conteúdo do arquivo app_cron_data.txt:

$ svn cat file:///home/saml/svnrepo/app_cron_data.txt
*/5 * * * * /path/to/job -with args"

Exemplo de loop de uso

Portanto, o usuárioA deseja atualizar a entrada do crontab. Eles fariam o seguinte para começar:

$ cd $HOME/somedir
$ svn co file:///home/saml/svnrepo/ mywksp
A    mywksp/app_cron_data.txt
$ cd mywksp

Agora eles fazem algumas edições no arquivo crontab, app_cron_data.txte os enviam para o repositório quando terminam.

$ svn commit -m "some msg.." app_cron_data.txt

Para implantar essas mudanças, eles executariam este sudocomando:

$ sudo deploy_app_cron.bash

Referências

Responder2

Bem, a solução certa é usar o cron corretamente e permitir que cada usuário tenha seu próprio crontab por usuário. Existe alguma razão omitida para você configurar crontabs dessa maneira? Pode até ser mais preferível usar crontabs por usuário e alguma outra solução alternativa para o que quer que esse "crontab unificado" pretenda superar...?

informação relacionada