Como verificar se um diretório ainda é usado em um processo

Como verificar se um diretório ainda é usado em um processo

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/dirque 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/dirainda 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.parte somente depois de ter certeza de que tudo foi concluído, renomeie paraexample_output.tar.gz

Defina um aplicativo consumidor B para ignorar os *.partarquivos 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).

informação relacionada