Meu script bash bloqueia o arquivo quando o Java tenta lê-lo

0

Eu tenho um script bash no Linux (CentOS) que redireciona a saída para um arquivo. Demora alguns minutos para executar:

./myBashScript.sh >> file.csv

Eu tenho um aplicativo java que tenta ler o arquivo (somente leitura) para processamento adicional:

    File file = new File("file.csv");
            Scanner input = new Scanner(file);
            while (input.hasNextLine()) {
                String line = input.nextLine();
                // do something...
            }

Esses processos estão em Crontab . Tudo funciona bem, mas aparentemente sempre que o script bash está redirecionando a saída para o arquivo, o aplicativo Java não pode lê-lo. Os logs mostram "File not found" exceção!

O arquivo está bloqueado ?! Como posso resolver o problema?

    
por Tina J 31.07.2018 / 21:08

1 resposta

1

Tente / tente e tente novamente ... O bloqueio existe por um motivo. Se o arquivo ainda está sendo escrito, você não quer lê-lo. Mesmo se você puder, haverá pelo menos um caso em que seu código Java pensa que leu todo o arquivo quando a geração de CSV ainda não foi concluída.

Na verdade, seu código é perigoso, o arquivo é provavelmente fechado entre dois comandos shell que o anexam, portanto, seu código Java pode abrir e bloquear o arquivo para si mesmo enquanto o script de shell é executado.

Portanto, inicie o código Java quando o arquivo estiver totalmente gerado ou, se o código Java estiver assistindo ao arquivo, gere o arquivo com um nome temporário e renomeie para o nome esperado depois de concluído.

    
por 31.07.2018 / 21:47