2
respostas

o arquivo txt do monitoramento_hardware.txt não aparece apos ser rodado o script

o arquivo txt do monitoramento_hardware.txt não aparece apos ser rodado o script

#!/bin/bash

LOG_DIR="monitoramento_sistema"
mkdir -p $LOG_DIR

function monitorar_logs() {
grep -E "fail(ed)?|error|denied|unauthorized" /var/log/syslog | awk '{print $1, $2, $3, $4, $5, $6, $7}' > $LOG_DIR/monitoramento_logs_sistema.txt
grep -E "fail(ed)?|error|denied|unauthorized" /var/log/syslog | awk '{print $1, $2, $3, $4, $5, $6, $7}' > $LOG_DIR/monitoramento_logs_auth.txt
}

function monitorar_rede() {
if ping -c 1 8.8.8.8 > /dev/null; then
echo "$(date): Conectividade ativa" >> $LOG_DIR/monitoramento_rede.txt
else
echo "$(date): Sem conexao com a internet" >> $LOG_DIR/monitoramento_rede.txt

    fi

    if curl -s --head https://www.alura.com.br/ | grep "

HTTP/2 200" > /dev/null; then
echo "$(date): Conexao com a alura bem-sucedida." >> $LOG_DIR/monitoramento_rede.txt
else
echo "$(date): Falha ao conectar com a alura." >> $LOG_DIR/monitoramento_rede.txt
fi
}

function monitorar_disco() {
echo "$(date)" > $LOG_DIR/monitoramento_disco.txt
df -h | grep -v "snapfuse" | awk '$5+0 > 30 {print $1 " esta com " $5 " de uso."}' >> $LOG_DIR/monitoramento_disco.txt
echo "uso de disco no dir principal:" >> $LOG_DIR/monitoramento_disco.txt
du -sh /home/uriid >> $LOG_DIR/monitoramento_disco.txt
}

function monitorar_hardware() {
echo "$(date)" > $LOG_DIR/monitoramento_hardware.txt
free -h | grep Mem | awk '{print "Total: " $2 ", Usada: " $3 ", Livre: " $4}' >> $LOG_DIR/monitoramento_hardware.txt
}

function executar_monitoramento() {
monitorar_logs
monitorar_rede
monitorar_disco
monitorar_hardware
}

echo "Iniciando monitoramento..."
executar_monitoramento
echo "Monitoramento concluído. Verifique os logs em $LOG_DIR"

2 respostas

Olá Yuri.
Tudo bem?

  • Adicione esta linha antes da função executar_monitoramento:
set -x

Isso faz o Bash mostrar cada comando que ele está executando, ótimo para ver se o trecho monitorar_hardware realmente roda.

  • Verifique se o arquivo é realmente criado em outro lugar
    Rode este comando logo após executar o script:
find . -type f -name "monitoramento_hardware.txt"

Isso procura o arquivo em toda a árvore de diretórios a partir do local atual.
Se ele aparecer em outro diretório (por exemplo, /tmp ou /root), o problema é só o caminho relativo.

  • Adicione mensagens de debug
    Edite a função monitorar_hardware para isso:
function monitorar_hardware() {
    echo "Iniciando monitoramento de hardware..."
    echo "$(date)" > $LOG_DIR/monitoramento_hardware.txt

    if free -h | grep -i "mem" | awk '{print "Total: " $2 ", Usada: " $3 ", Livre: " $4}' >> $LOG_DIR/monitoramento_hardware.txt; then
        echo "Hardware monitorado com sucesso."
    else
        echo "Falha ao capturar informações de hardware!"
    fi
}

Assim, ao rodar:

bash seu_script.sh

Você verá no terminal se essa parte realmente foi executada e se o comando free funcionou.

  • Verifique as permissões:
chmod +x seu_script.sh
./seu_script.sh
  • Verifique o caminho e se está salvando no local correto:
LOG_DIR="/home/$USER/monitoramento_sistema"

Teste as opções acima e me envie um feedback.
Bons estudos.

Analisei o script que você postou. A sua função monitorar_hardware em si está correta, o problema não é nela.

O erro que está impedindo a criação do arquivo monitoramento_hardware.txt está, na verdade, na sua função monitorar_rede.

O problema é este trecho aqui:

Bash

if curl -s --head https://www.alura.com.br/ | grep "

Copiar código
HTTP/2 200" > /dev/null; then
Note que o texto "Copiar código" e uma quebra de linha foram parar dentro das aspas do comando grep. Isso provavelmente aconteceu na hora de copiar e colar o código da aula.

Como a função monitorar_rede é chamada no script antes das funções monitorar_disco e monitorar_hardware, o script trava nessa linha (porque o grep nunca vai encontrar essa string de texto) e, por isso, ele nunca chega a executar a parte que cria os outros arquivos de log.

A correção é simples, basta remover esse texto extra de dentro das aspas do grep:

Bash

if curl -s --head https://www.alura.com.br/ | grep "HTTP/2 200" > /dev/null; then

Aqui está a função monitorar_rede completa e corrigida para você substituir no seu script:

Bash

function monitorar_rede() {
if ping -c 1 8.8.8.8 > /dev/null; then
echo "$(date): Conectividade ativa" >> $LOG_DIR/monitoramento_rede.txt
else
echo "$(date): Sem conexao com a internet" >> $LOG_DIR/monitoramento_rede.txt
fi

# Linha corrigida:
if curl -s --head https://www.alura.com.br/ | grep "HTTP/2 200" > /dev/null; then
    echo "$(date): Conexao com a alura bem-sucedida." >> $LOG_DIR/monitoramento_rede.txt
else
    echo "$(date): Falha ao conectar com a alura." >> $LOG_DIR/monitoramento_rede.txt
fi

}
Depois de fazer essa alteração, salve o arquivo e lembre-se de dar permissão de execução para ele:

chmod +x seu_script.sh

E então execute-o novamente:

./seu_script.sh

Ao corrigir a função monitorar_rede, o script deve conseguir rodar por completo e criar todos os arquivos de log que você espera, incluindo o monitoramento_hardware.txt.

Espero que isso resolva o problema.