Criando LOG a partir de condição da Execução do Script [RESOLVIDO]

1. Criando LOG a partir de condição da Execução do Script [RESOLVIDO]

Thiago Boeira
tcboeira

(usa Debian)

Enviado em 24/01/2021 - 06:51h

Olá,
Quando quero gerar um LOG de um Script, uso essa parte abaixo...

LOG="/var/log/out-install/${0##*/}".log
exec 1> >(tee -a $LOG)
exec 2>&1


Ocorre que ele cria o LOG com toda a saída da tela...

Bem, pensei em criar algo que fosse condicional e fizesse um teste. A partir deste resultado ele execute ou não o resto do Script
Mas queria que o LOG não fosse o que saiu em tela em caso de sucesso e sim, apenas uma informação, como OK. Mas caso fosse FALHA ai si sairia tudo

Fiz algo mais ou menos assim...
#!/bin/bash

LOG="/var/log/out-install/${0##*/}".log
exec 1> >(tee -a $LOG)
exec 2>&1

sudo apt update
if [ $? -eq 0 ]; then
echo ""
echo Executar UPGRADE e DIST UPGRADE
echo ""
LOG="/var/log/out-install/${0##*/}-SUCESS".log
sudo apt upgrade -y ; sudo apt dist-upgrade -y
else
echo ""
echo EXECUÇÃO FAIL
echo ""
LOG="/var/log/out-install/${0##*/}-ERROR".log
exec 1> >(tee -a $LOG)
exec 2>&1
fi


Porém não consigo o resultado desejado.
Alguém pode me explicar a razão, e me ajudar a atingir o cenário desejado?

Obrigado


  


2. Re: Criando LOG a partir de condição da Execução do Script

João Cláudio de Alcântara
aguamole

(usa Lubuntu)

Enviado em 24/01/2021 - 10:43h

#!/bin/bash

LOG="/var/log/out-install/${0##*/}".log
exec 1> >(tee -a $LOG)
exec 2>&1

sudo apt update
if [ $? -eq 0 ]; then
echo ""
echo Executar UPGRADE e DIST UPGRADE
echo ""
LOG="/var/log/out-install/${0##*/}-SUCESS".log
sudo apt upgrade -y 2>>$LOG && sudo apt dist-upgrade -y 2>>$LOG && echo "OK" >>$LOG
else
echo ""
echo EXECUÇÃO FAIL
echo ""
LOG="/var/log/out-install/${0##*/}-ERROR".log
exec 1> >(tee -a $LOG)
exec 2>&1
fi
Acho que dispensa explicação é tão simples que é fácil entender.
Eu não verifiquei o código eu só adicionei a solução...
A linha maior é a modificada.
O código esta bem estruturado ele esta bom de ler.

Porque você usa o "tee" para criar e editar o arquivo?
Usar o bash para criar o arquivo seria mais rápida a execução porque tem um atraso do bash para o software externo.

CPU i5-8400 GTX 750 SofRaid 4xSSD 16GB DDR4 mesmo assim uso Lubuntu.


3. Re: Criando LOG a partir de condição da Execução do Script

pluto
pluto12

(usa Outra)

Enviado em 24/01/2021 - 13:32h

Não tem como saber qual o seu resultado esperado.
Mas tem um erro no seu script.
Quando você executa o
 exec 2>&1 

ele deve sair com 0,
a não ser que alguma dessas streams esteja fechada..

Não compensa eu tentar arrumar esse seu script.
Tente dar uma olhada nos logs que o apt e dpkg geram:
/var/log/apt/term.log
/var/log/apt/history.log
/var/log/dpkg.log


Use um `tail -200 | less` ou algo assim..


4. Re: Criando LOG a partir de condição da Execução do Script

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 26/01/2021 - 19:35h

tcboeira escreveu:

Olá,
Quando quero gerar um LOG de um Script, uso essa parte abaixo...

LOG="/var/log/out-install/${0##*/}".log
exec 1> >(tee -a $LOG)
exec 2>&1


Ocorre que ele cria o LOG com toda a saída da tela...

Bem, pensei em criar algo que fosse condicional e fizesse um teste. A partir deste resultado ele execute ou não o resto do Script
Mas queria que o LOG não fosse o que saiu em tela em caso de sucesso e sim, apenas uma informação, como OK. Mas caso fosse FALHA ai si sairia tudo

Fiz algo mais ou menos assim...
#!/bin/bash

LOG="/var/log/out-install/${0##*/}".log
exec 1> >(tee -a $LOG)
exec 2>&1

sudo apt update
if [ $? -eq 0 ]; then
echo ""
echo Executar UPGRADE e DIST UPGRADE
echo ""
LOG="/var/log/out-install/${0##*/}-SUCESS".log
sudo apt upgrade -y ; sudo apt dist-upgrade -y
else
echo ""
echo EXECUÇÃO FAIL
echo ""
LOG="/var/log/out-install/${0##*/}-ERROR".log
exec 1> >(tee -a $LOG)
exec 2>&1
fi


Porém não consigo o resultado desejado.
Alguém pode me explicar a razão, e me ajudar a atingir o cenário desejado?
Obrigado

Boa noite TcBoeira.
Segue sugestão:

sudo apt update > log.txt 2>&1 #saida de erro e saida padrão para log.txt
sed -n '$p' log.txt|if grep -Eq '^[0-9]+' log.txt;then #"Pega" a ultima linha do log.txt, Se tem número(s), tem atualização disponível.
echo -e "Atualização Disponível\nContinuando\n";
sudo apt upgrade -y;
else
echo -e "Não tem Atualizações";
fi

Outra opção.
Exemplo:
if ls -l naoexiste.txt 2> log_erro.txt;then #Direciona somente a saída de erro para "log_erro.txt"
echo "COMANDO OK";else
echo "ERRO no COMANDO";
cat log_erro.txt;
fi
Obs.: Funciona somente para comandos onde o "Exit status." é ZERO para ok.

______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________
Nota de esclarecimento:
O comando: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p',
faz parte da minha assinatura.
O qual, "filtra" a página: "https://www.vivaolinux.com.br/termos-de-uso/",
Mostrando o seguinte:

Se você sanou sua dúvida ou resolveu um problema a partir de um
tópico criado, é extremamente recomendável que acesse o tópico e
marque-o como "RESOLVIDO". E mais recomendável ainda que você eleja
como melhor resposta a que mais lhe ajudou.


______________________________________________________________________



5. Re: Criando LOG a partir de condição da Execução do Script [RESOLVIDO]

Thiago Boeira
tcboeira

(usa Debian)

Enviado em 27/01/2021 - 21:27h

Olá, Boa Noite,

Bem, não sei se a explicação é util neste momento.
Toda minha movimentação é em função de eventualmente, quando inserimos uma maquina em nosso dominio, ela faz update para instalar antecipadamente alguns programas.
As vezes, o repositório interno não atualizou corretamente o mirror externo para o qual ele esta apontado ( usamos o apt mirror)
Esse quadro é mais simples e facil para que a instalação seja realizada com usuario padrão da ISO - a qual preparamos com pequenas alterações.
Então, ao realizar o UPDATE, as vez ocorre falha de HASUN. Esse processo não impede q a maquina ingresse no dominio.
A idéia é que com isso, seja no momento da instalação, seja posterior, possa coletar esses dados - de erro - e ver as maquinas e ir tratando. De forma pro ativa.
Diante disso, a intensão é criar um script que ele teste o update e com erro ele já avise disso e pule a etapa de instalação de Apps.
Baseado na ajuda e todos vocês, de forma mais 'rural", fiz o exemplo abaixo:

#!/bin/bash

# DEFINIÇÃO DE VARIAVEIS PARA COLETA DE LOG E DATA PARA LOG
LOG="/var/log/out-install/${0##*/}".log
data=`/bin/date "+%d-%m-%Y-%Hh%Mm"`

sudo apt update
if [ $? -eq 0 ]; then
echo ""
echo Executar UPGRADE e DIST UPGRADE
echo ""
LOG="/var/log/out-install/${0##*/}-${data}-SUCESS".log
sudo apt upgrade -y 2>>$LOG && sudo apt dist-upgrade -y && echo "Execução de UPGRADE e DIST UPGRADE em $data com sucesso" >>$LOG
echo ""
else
echo ""
echo EXECUÇÃO FAIL
echo ""
LOG="/var/log/out-install/${0##*/}-${data}-ERROR".log
exec 1> >(tee -a $LOG)
sudo apt update 2>>$LOG && echo "Erro - Consulte LOG para avaliar solução" >>$LOG
exec 1> >(tee -a $LOG)
exec 2>&1
sudo apt update
fi


No fim, esse Script vai ficar - via CRON - agendado, e no server, outra tarefa que vai buscar em todas as maquinas ... para que, existindo o LOG com erro, possa gerar manutenção devida ...

Escrevi escrevi escrevi mas não sei se me fiz claro... mas a idéia em si acho que foi atendida!!!!
Muito Obrigado!

Vou esperar mais uns dias, caso alguem queria contriibuir - e melhorar - com esta idéia!!!

Abraços







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts