
Eu tenho algum diretório compartilhado /path/to/dir
. Estou executando um processo de backup nesse diretório. O processo está rodando no servidor A enquanto eu só tenho acesso no servidor B. Assim, quando o processo de backup terminar no servidor A, terei os dados no diretório compartilhado /path/to/dir
que também está disponível no servidor B.
Agora tenho um script bash no servidor B que só pode ser executado quando o processo de backup for concluído. Como não consigo acessar o outro servidor fiquei pensando no seguinte:
Posso verificar se /path/to/dir
ainda está em uso pelo processo de backup e só executar meu script se o processo não estiver mais em execução no diretório?
Não sei se é importante saber que é um diretório compartilhado (NFS).
Responder1
Uma solução melhor: crie um arquivo de bloqueio no compartilhamento que exista apenas enquanto o trabalho estiver em execução e será excluído no servidor A assim que o trabalho for concluído.
No servidor B você apenas verifica se esse arquivo existe e se existir, espere até que ele desapareça.
Responder2
Defina um aplicativo de produção A para criar os arquivos como example_output.tar.gz.part
e somente depois de ter certeza de que tudo foi concluído, renomeie paraexample_output.tar.gz
Defina um aplicativo consumidor B para ignorar os *.part
arquivos e processar todos os arquivos que não correspondem*.part
Este esquema é reconhecível porque é usado em muitos aplicativos de consumo (vem à mente navegadores da web ou clientes scp).
Dessa forma, você não precisa de nenhum arquivo de bloqueio e pode ter vários consumidores. Um arquivo de bloqueio é sempre uma causa potencial de falha se um arquivo antigo sobrar após o encerramento de um aplicativo (ou a reinicialização do servidor).