Como atualizar com segurança um script de servidor, que pode ser iniciado a qualquer momento pelo cron

1

Eu tenho um script de servidor que é iniciado pelo cron a cada 10 minutos e faz algumas operações com o banco de dados, para que ele possa estar em execução por vários minutos. Então, como você vê, a probabilidade de sobrepor o processo de atualização e o trabalho de script é bastante alta, enquanto eu não posso permitir isso, já que isso pode levar à corrupção do banco de dados, etc.

Meu primeiro pensamento foi fazer algum tipo de mecanismo de bloqueio, mas tudo o que imagino se torna bastante simplificado: por exemplo, Eu estou pensando em ter um arquivo PID para executar script com algum tipo de bloqueio, mas isso leva a muitos detalhes, como bloqueio correto, evitando situações em que o script sai por erro deixando o arquivo .pid no disco (impedindo as seguintes execuções), etc, etc.

Minha pergunta então: existe uma maneira simples de fazer isso ou alguma biblioteca / ferramenta que resolva esse tipo de problema?

Obrigado!

    
por izhak 05.04.2014 / 10:59

2 respostas

4

A solução padrão é gravar a nova versão do script em um novo arquivo com um nome temporário no mesmo diretório que o destino. Uma vez que o script foi escrito, ele é renomeado no topo da versão antiga. Qualquer instância em execução ainda estará usando a versão antiga.

Se o script for chamado /usr/local/bin/script.sh , o nome temporário poderá ser /usr/local/bin/.script.sh.XXXXXX , em que XXXXXX será substituído por uma sequência gerada aleatoriamente.

    
por 05.04.2014 / 11:33
3

Apenas faça seu script cron fazer isso para você quando terminar.

echo "cat /tmp/new.cron.sh > /usr/local/bin/current.cron.sh" >> /usr/local/bin/current.cron.sh
    
por 05.04.2014 / 11:32