3
respostas

[Dúvida] Error is not recoverable: exiting now

Olá, será que comi bola em algum momento?
Erro no script
Script Linux

3 respostas

Ola

O erro principal é este:

tar (child): {ARQUIVO_DIR}/logs_2025-11-05.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now

E antes disso:

mv: cannot stat '../myapp/logs-processados/logs_stats_2025-11-05.txt': No such file or directory

Ou seja: o script está tentando mover e compactar arquivos que ainda não existem, ou o caminho que ele usa não foi criado antes da chamada ao tar.

O que está acontecendo

Na segunda imagem, seu script define:

ARQUIVO_DIR="../myapp/logs-processados"
TEMP_DIR="../myapp/logs-temp"

E mais embaixo, tenta:

tar -czf "${ARQUIVO_DIR}/logs_$(date +%F).tar.gz" -C "$TEMP_DIR" .

Mas o erro indica que ${ARQUIVO_DIR} não existia quando o tar foi executado — ou seja, o diretório ../myapp/logs-processados não foi criado antes da compactação.

Como corrigir

Adicione logo no início do seu script (após definir as variáveis):

mkdir -p "$ARQUIVO_DIR"
mkdir -p "$TEMP_DIR"

Parece que você já tem um mkdir -p "$TEMP_DIR" ali, mas talvez tenha movido ou apagado o mkdir -p "$ARQUIVO_DIR" — ele precisa vir antes do tar e antes de qualquer mv ou echo > "$ARQUIVO_DIR/...txt".
Outras boas práticas

  1. Verifique se há logs antes de processar:

    if [ -z "$(ls -A "$LOG_DIR")" ]; then
        echo "Nenhum log encontrado em $LOG_DIR"
        exit 0
    fi
    
  2. Use set -e no início para o script parar quando houver erro:

    set -e
    
  3. Teste os caminhos absolutos com:

    echo "ARQUIVO_DIR=$ARQUIVO_DIR"
    echo "TEMP_DIR=$TEMP_DIR"
    

Corrija essas duas linhas:

mv "${ARQUIVO_DIR}/log_stats_$(date +%F).txt" "$TEMP_DIR/" (Está "logs", mas o arquivo criado é "log")

tar -czf "${ARQUIVO_DIR}/logs_$(date +%F).tar.gz" -C "$TEMP_DIR" . (A aspa dupla é antes de $)

Confere se você colocou as aspas certinho.
Às vezes o erro é só porque o padrão tá sem aspas ou com aspas invertidas.
Exemplo que funciona:

grep "palavra" arquivo.txt

Lembra que o grep diferencia maiúsculas de minúsculas.
Se você procurar “Erro” mas no arquivo tá “erro”, não vai achar.
Caso queira ignorar isso, usa:

grep -i "erro" arquivo.txt

Se for buscar em diretório, tem que usar -r.
Muita gente esquece disso:

grep -r "texto" .

Se o grep não estiver mostrando nada, tenta testar o padrão isolado.
Tipo:

cat arquivo.txt | grep "parte do texto"

Assim dá pra ver se o problema é o grep ou o padrão mesmo.

Outra coisa comum é errar o nome do arquivo.
Dá um ls antes pra confirmar se o arquivo está no diretório certo