Como dois usuários podem definir o mesmo arquivo cron para executar?

1

Em nosso ambiente, temos dois DBAs para executar algumas tarefas cron definidas no arquivo cron_jobs.txt. Freqüentemente precisamos sincronizar tempo e comandos nesse arquivo cron_jobs.txt e recarregá-lo.

O problema é que, se o DBA_1 editar e recarregar esse arquivo ($ crontab cron_jobs.txt), ele será carregado sob sua conta de usuário. Agora, o DBA_2 edita o mesmo arquivo cron_jobs.txt e recarrega. Os novos conjuntos de trabalhos serão executados sob as contas do usuário DBA_2. Então, basicamente, os mesmos trabalhos estão sendo executados duas vezes.

Por exemplo, um trabalho está definido para ser executado diariamente em 3PM por DBA_1. Poucos dias depois, o DBA_2 muda para 2PM e recarrega. Agora temos o mesmo trabalho nas 14h e 15h.

Existe alguma maneira de mesclar os trabalhos? Não importa quem carrega o arquivo cron_job.txt, apenas um conjunto de trabalhos deve estar rodando? By the way (DBA_1 tem acesso de administrador para o UNIX, o DBA_2 não). Estamos usando o Sun Os 5.10. Uma solução será apreciada.

Obrigado.

DBA_2

    
por MehdiAnis 16.06.2009 / 18:54

5 respostas

5

Configure uma conta separada para essa finalidade e permita que as tarefas do cron sejam executadas somente nessa conta.

Esta é uma prática recomendada e oferece muitos benefícios além de corrigir seu problema:

  • Nada para se preocupar se o DBA for atingido por um ônibus ou outro
  • Os ambientes reais da conta de usuário não afetam seus trabalhos agendados de produção
  • Juntamente com o sudo, fornece um bom registro / responsabilidade

Na minha empresa anterior, desativei cron & em para todas as contas de usuários reais.

    
por 16.06.2009 / 19:39
9

Use uma conta de função em vez de vincular as coisas a uma conta de usuário comum. Em seguida, permita que ambos os usuários executem esse comando.

sudo crontab -u dba_cron_user -e

    
por 16.06.2009 / 19:06
2

Uma maneira de fazer isso seria ter um arquivo de semáforo para o qual ambos os usuários podem gravar. Peça ao cron job para verificar a existência desse arquivo e a data do arquivo - se é a data de hoje do que o trabalho já foi executado - então não é necessário executar - a segunda tentativa de executar o arquivo será encerrada. O problema com essa abordagem é que a execução anterior sempre ganharia.

    
por 16.06.2009 / 19:03
0

Normalmente, diz:

crontab -e

e edita o arquivo. Nesse caso, as edições anteriores estão presentes no momento de fazer alterações. Isso mantém o crontab (de um login de usuário) consistente.

Outra forma seria buscar o arquivo atual, anexá-lo e, em seguida, carregá-lo.

crontab -l > buffer.txt
cat new_command.txt >> buffer.txt
crontab buffer.txt

Aqui, o truque necessário será criar um script para a mesclagem de new_command.txt no buffer.txt para que a replicação seja eliminada. O usuário humano normalmente faria isso corretamente ao usar crontab -e .

    
por 16.06.2009 / 19:01
0

Você pode criar um link físico ou flexível a partir do arquivo crontab do primeiro usuário (/ var / spool / cron / DBA_1) para o arquivo crontab do segundo usuário (/ var / spool / cron / DBA_2). A desvantagem desse método é que ambos os usuários compartilham o mesmo crontab e nenhum deles obtém um arquivo individual.

Os locais mencionados acima estão corretos para o RHEL / CentOS; eles podem ser diferentes em outra distribuição.

    
por 16.06.2009 / 19:35

Tags