Shutdown Cron durante a execução do SaltStack

2

Se atualizarmos nossos sistemas com o SaltStack, isso leva cerca de 40 segundos.

Durante esses 40 segundos, o estado do sistema não é consistente.

Se houver trabalhos agendados que iniciem nesse período, é provável que eles produzam erros estranhos.

Claro que poderíamos mudar completamente nossa configuração e usar os contêineres. Isso tornaria as atualizações do atomar possíveis. Mas isso precisaria de muito trabalho que não pode ser tratado hoje.

Existe uma maneira de desativar tarefas agendadas no minion se o sal for executado?

    
por guettli 27.10.2017 / 09:19

2 respostas

1

Para desabilitar completamente as tarefas do cron, você pode simplesmente desativar o daemon cron (geralmente é crond no CentOS e cron no servidor Ubuntu).
Você pode parar e iniciá-lo diretamente na corrida de sal.

Se você precisar desabilitar a execução do cron apenas para alguns cron jobs específicos, basta criar um script (vamos chamá-lo de run-crons ) e usá-lo para desabilitar somente execuções específicas do cron. Por exemplo, você pode criar uma entrada cron similar a:

* * * * * root run-crons && echo "this is my actual cron job"

com o script run-crons semelhante a

#!/bin/bash
set -e

[ -f /etc/disabled/crons ] && exit 10

exit 0

, portanto, se o /etc/disabled/crons existir, essas linhas de cron específicas precedidas por run-crons não serão executadas. Você pode criar / remover o arquivo de desativação também durante a execução de salt

Para parar o daemon cron quando o salt run, inclua apenas um estado com algo como:

stop_cron:
  service.dead:
    - name: cron
    - order: 1

start_cron:
  service.running:
    - name: cron
    - order: last

Você pode precisar ajustar o nome do daemon cron dependendo da sua distribuição linux

Para o caminho run-crons , inclua um .sls com algo como:

disable_cron:
  file.managed:
    - name: /etc/disabled/cron
    - replace: false
    - order: 1

enable_cron:
  file.absent:
    - name: /etc/disabled/cron
    - order: last
    
por 01.11.2017 / 17:58
0

Na verdade, existem duas maneiras de fazer isso.

Modifique o método de script

Localize e modifique o script que executa a atualização do SaltStack. Pode ser algo como bootstrap-salt.sh , mas pode ser qualquer coisa. Tente procurá-lo em sua lista de processos enquanto a atualização estiver em execução ( ps -ef |grep -i salt ). deve ser algo com .sh no final. Depois de localizar o script, você pode inserir na parte superior do script uma linha que desativa o cron. Este é o método mais seguro.

Isso pode ser um dos seguintes:

/etc/init.d/crond stop  

ou

crontab -l -u root > /root/cron.bak  
crontab -r -u root  

Nota: O posterior só funciona no usuário que você lista e depende de como você está gerenciando o cron. Por exemplo, esse método não desabilitará nenhuma tarefa listada em /etc/cron.daily/ cron.hourly/ cron.monthly/ or cron.weekly/ . Se você decidir usar este método, seria melhor realmente identificar o processo que você não deseja executar ao mesmo tempo que a atualização do SaltStack e desabilitar o cron que executa esse processo especificamente.

Em seguida, no final do script, uma das seguintes opções:

/etc/init.d/crond start  

ou

crontab -u root /root/cron.bak  

Executar um método daemon

Escreva um script que seja executado como um daemon para verificar um processo em execução, mas isso é menos confiável e teria a chance de perder durante o intervalo de tempo enquanto o script é repetido. A única maneira de mitigá-lo seria apenas fazer um loop sem dormir, mas, novamente, isso não é aconselhável. Eu usaria esse método apenas como último recurso se você não conseguir localizar ou modificar o script que inicia a atualização para SaltStack.

O script daemon seria parecido com isto:

#!/bin/bash
while true
do
   # this might have to be tweaked based on the process you are looking for
   SaltUpdateRunning=$(ps -ef |grep -v grep |grep -i salt |grep -i update | wc -l)
   if [ $SaltUpdateRunning -gt 0 ]
   do
      /etc/init.d/crond stop
      sleep 3600 # 1 hour just to be safe - you can modify to 
                 # match the runtime of SaltStack update
      /etc/init.d/crond start
   done
   sleep 1 # this is for safety but you can remove and it will loop 
           # much faster with less chance to miss the running process
done

Você também deve procurar na capacidade do SaltStack para gerenciar o cron . Não tenho certeza se existe uma maneira de desabilitar automaticamente o cron ou certos processos enquanto a atualização está em execução, mas não faria mal mergulhar um pouco mais em suas habilidades.

    
por 02.11.2017 / 16:56