Verificar HD ruim e informar via notify-send para todos os usuários do sistema

1. Verificar HD ruim e informar via notify-send para todos os usuários do sistema

Morpheus
Minions

(usa Nenhuma)

Enviado em 01/07/2021 - 20:08h

Verificar HD ruim e informar via notify-send para todos os usuários do sistema.

O aviso via notify-send aparece também com HD bom e o tempo -t 800 achei rápido na tela.



log="/tmp/resultado.log"

fdisk -l | awk '{ print $1}' | grep -i "/" >> /tmp/verifica.log

while read linha; do

montado=$(mount | grep "$linha" | awk '{ print $1}')

if [ -e "$montado" ];then

echo "
=== INÍCIO DA SEÇÃO DE INFORMAÇÕES PARA $montado ===
" | tee >> "$log"

echo "Fabricante: `smartctl -i $montado | grep -i "Model Family" | cut -d: -f2`" >> "$log"
echo "Modelo: `smartctl -i $montado | grep -i "Device Model" | cut -d: -f2`" >> "$log"
echo "Número do serial: `smartctl -i $montado | grep -i "Serial Number" | cut -d: -f2`" >> "$log"
echo "Capacidade: `smartctl -i $montado | grep -i "User Capacity" | cut -d: -f2`" >> "$log"
echo "Taxa de rotação: `smartctl -i $montado | grep -i "Rotation Rate" | cut -d: -f2`" >> "$log"
echo "Suporte a SMART: `smartctl -i $montado | grep -i "SMART support is" | cut -d: -f2`" >> "$log"


echo "Teste: `smartctl -H $montado | grep -i "result:" | cut -d: -f2`" >> "$log"

fi

done < /tmp/verifica.log

who | cut -d" " -f1 | sort -u > /tmp/usuarios.log

mensagem=$(cat $log)

echo "

"
w


# Tem conta de usuário que não tem :0.x aparece com um -

w | awk '{ print $3}'| cut -d":" -f 2 | tail -n 2 > /tmp/telas.log


export DISPLAY=:0


while read usuario; do


echo "
Enviando mensagem para $usuario
"

echo "Possível falha de disco

HD pode ter um problema. $mensagem
"

su "$usuario" -c "notify-send --icon=important -t 800 'Possível falha de disco' 'HD pode ter um problema. $mensagem ' "


# xdg-open "$log" 2> /dev/null

sleep 1

done < /tmp/usuarios.log





Era somente para aparece com HD ruim o aviso na tela.



  


2. Re: Verificar HD ruim e informar via notify-send para todos os usuários do sistema

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 01/07/2021 - 22:06h


Minions escreveu:

Verificar HD ruim e informar via notify-send para todos os usuários do sistema.

O aviso via notify-send aparece também com HD bom e o tempo -t 800 achei rápido na tela.



log="/tmp/resultado.log"

fdisk -l | awk '{ print $1}' | grep -i "/" >> /tmp/verifica.log

while read linha; do

montado=$(mount | grep "$linha" | awk '{ print $1}')

if [ -e "$montado" ];then

echo "
=== INÍCIO DA SEÇÃO DE INFORMAÇÕES PARA $montado ===
" | tee >> "$log"

echo "Fabricante: `smartctl -i $montado | grep -i "Model Family" | cut -d: -f2`" >> "$log"
echo "Modelo: `smartctl -i $montado | grep -i "Device Model" | cut -d: -f2`" >> "$log"
echo "Número do serial: `smartctl -i $montado | grep -i "Serial Number" | cut -d: -f2`" >> "$log"
echo "Capacidade: `smartctl -i $montado | grep -i "User Capacity" | cut -d: -f2`" >> "$log"
echo "Taxa de rotação: `smartctl -i $montado | grep -i "Rotation Rate" | cut -d: -f2`" >> "$log"
echo "Suporte a SMART: `smartctl -i $montado | grep -i "SMART support is" | cut -d: -f2`" >> "$log"


echo "Teste: `smartctl -H $montado | grep -i "result:" | cut -d: -f2`" >> "$log"

fi

done < /tmp/verifica.log

who | cut -d" " -f1 | sort -u > /tmp/usuarios.log

mensagem=$(cat $log)

echo "

"
w


# Tem conta de usuário que não tem :0.x aparece com um -

w | awk '{ print $3}'| cut -d":" -f 2 | tail -n 2 > /tmp/telas.log


export DISPLAY=:0
while read usuario; do
echo "
Enviando mensagem para $usuario
"
echo "Possível falha de disco

HD pode ter um problema. $mensagem
"
su "$usuario" -c "notify-send --icon=important -t 800 'Possível falha de disco' 'HD pode ter um problema. $mensagem ' "
# xdg-open "$log" 2> /dev/null
sleep 1
done < /tmp/usuarios.log

Era somente para aparece com HD ruim o aviso na tela.

Minions, boa noite.
Algumas observações:
Reveja o comando:
fdisk -l | awk '{ print $1}' | grep -i "/" >> /tmp/verifica.log
Recomendo:
fdisk -l|awk -F '[ :]' '/^Disk \/dev\/sd*/{print $2}'
Você está testando uma variável como se fosse um arquivo....
if [ -e "$montado" ];
Aqui da sempre "false"

echo "Fabricante: `smartctl -i $montado | grep -i "Model Family" | cut -d: -f2`" >> "$log"
echo "Modelo: `smartctl -i $montado | grep -i "Device Model" | cut -d: -f2`" >> "$log"
echo "Número do serial: `smartctl -i $montado | grep -i "Serial Number" | cut -d: -f2`" >> "$log"
echo "Capacidade: `smartctl -i $montado | grep -i "User Capacity" | cut -d: -f2`" >> "$log"
echo "Taxa de rotação: `smartctl -i $montado | grep -i "Rotation Rate" | cut -d: -f2`" >> "$log"
echo "Suporte a SMART: `smartctl -i $montado | grep -i "SMART support is" | cut -d: -f2`" >> "$log"
......
Faça somente um smartclt -i 'disco', e pegue as informações que deseja.

Para aparecer SOMENTE a mensagem de ERRO, deve filtrar a saída do comando,
smartctl -H ....
Não tenho como testar....

______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver



3. Re: Verificar HD ruim e informar via notify-send para todos os usuários do sistema

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 03/07/2021 - 20:21h


Minions escreveu:

msoliver escreveu:

Recomendo:
fdisk -l|awk -F '[ :]' '/^Disk \/dev\/sd*/{print $2}'

Você está testando uma variável como se fosse um arquivo....
if [ -e "$montado" ];
Aqui da sempre "false"

echo "Fabricante: `smartctl -i $montado | grep -i "Model Family" | cut -d: -f2`" >> "$log"
echo "Modelo: `smartctl -i $montado | grep -i "Device Model" | cut -d: -f2`" >> "$log"
echo "Número do serial: `smartctl -i $montado | grep -i "Serial Number" | cut -d: -f2`" >> "$log"
echo "Capacidade: `smartctl -i $montado | grep -i "User Capacity" | cut -d: -f2`" >> "$log"
echo "Taxa de rotação: `smartctl -i $montado | grep -i "Rotation Rate" | cut -d: -f2`" >> "$log"
echo "Suporte a SMART: `smartctl -i $montado | grep -i "SMART support is" | cut -d: -f2`" >> "$log"
......
Faça somente um smartclt -i 'disco', e pegue as informações que deseja.

Para aparecer SOMENTE a mensagem de ERRO, deve filtrar a saída do comando,
smartctl -H ....


Obrigado em responde ao tópico.

Usando o comando abaixo não apareceu nada

[email protected]:# fdisk -l|awk -F '[ :]' '/^Disk \/dev\/sd*/{print $2}'
[email protected]:#


Comando antigo:

# fdisk -l | awk '{ print $1}' | grep -i "/"
/dev/sdb1
/dev/sda1
/dev/sda2
/dev/sda3
/dev/sda4
/dev/sda5
/dev/sda6
Na parte if [ -e "$montado" ]; .... coloca o "z" no lugar do "e"?

Boa noite Minions.
Estranhamente , aqui o comando:
fdisk -l|awk -F '[ :]' '/^Disk \/dev\/sd*/{print $2}'
/dev/sda
/dev/sdb
/dev/sdc
Funciona, mostrando "somente" os discos, e não as partições....
Detalhe, estou usando o gawk.

Outra opção para mostrar somente os discos:
#fdisk -l|sed -rn '/^Disk \/dev\/sd[a-z]:/s/Disk |: .*$//gp' 

O comando:
fdisk -l | awk '{ print $1}' | grep -i "/"
Mostra
I/O
/dev/sda1
/dev/sda2
/dev/sda3
/dev/sda4
/dev/sda5
/dev/sda6
I/O
/dev/sdb1
/dev/sdb2
/dev/sdb3
I/O
I/O
/dev/sdc1
/dev/sdc2
#----------------------------------------------------------------------------------------#
Na parte if [ -e "$montado" ]; .... coloca o "z" no lugar do "e"?
Não!
-z, testa se a variável é nula,
Coloque -n, para testar se a variável não é nula....
Caso use o '-z', negue o 'if'
if ! [ -z $montado];then....

Não vejo a necessidade de testar somente os discos montados, eu testaria todos.....
E não as partições, o disco em si!
______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver



4. Re: Verificar HD ruim e informar via notify-send para todos os usuários do sistema

Morpheus
Minions

(usa Nenhuma)

Enviado em 03/07/2021 - 23:26h


msoliver escreveu:


Minions escreveu:

msoliver escreveu:

Recomendo:
fdisk -l|awk -F '[ :]' '/^Disk \/dev\/sd*/{print $2}'

Você está testando uma variável como se fosse um arquivo....
if [ -e "$montado" ];
Aqui da sempre "false"

echo "Fabricante: `smartctl -i $montado | grep -i "Model Family" | cut -d: -f2`" >> "$log"
echo "Modelo: `smartctl -i $montado | grep -i "Device Model" | cut -d: -f2`" >> "$log"
echo "Número do serial: `smartctl -i $montado | grep -i "Serial Number" | cut -d: -f2`" >> "$log"
echo "Capacidade: `smartctl -i $montado | grep -i "User Capacity" | cut -d: -f2`" >> "$log"
echo "Taxa de rotação: `smartctl -i $montado | grep -i "Rotation Rate" | cut -d: -f2`" >> "$log"
echo "Suporte a SMART: `smartctl -i $montado | grep -i "SMART support is" | cut -d: -f2`" >> "$log"
......
Faça somente um smartclt -i 'disco', e pegue as informações que deseja.

Para aparecer SOMENTE a mensagem de ERRO, deve filtrar a saída do comando,
smartctl -H ....


Obrigado em responde ao tópico.

Usando o comando abaixo não apareceu nada

[email protected]:# fdisk -l|awk -F '[ :]' '/^Disk \/dev\/sd*/{print $2}'
[email protected]:#


Comando antigo:

# fdisk -l | awk '{ print $1}' | grep -i "/"
/dev/sdb1
/dev/sda1
/dev/sda2
/dev/sda3
/dev/sda4
/dev/sda5
/dev/sda6
Na parte if [ -e "$montado" ]; .... coloca o "z" no lugar do "e"?

Boa noite Minions.
Estranhamente , aqui o comando:
fdisk -l|awk -F '[ :]' '/^Disk \/dev\/sd*/{print $2}'
/dev/sda
/dev/sdb
/dev/sdc
Funciona, mostrando "somente" os discos, e não as partições....
Detalhe, estou usando o gawk.

Outra opção para mostrar somente os discos:
#fdisk -l|sed -rn '/^Disk \/dev\/sd[a-z]:/s/Disk |: .*$//gp' 

O comando:
fdisk -l | awk '{ print $1}' | grep -i "/"
Mostra
I/O
/dev/sda1
/dev/sda2
/dev/sda3
/dev/sda4
/dev/sda5
/dev/sda6
I/O
/dev/sdb1
/dev/sdb2
/dev/sdb3
I/O
I/O
/dev/sdc1
/dev/sdc2
#----------------------------------------------------------------------------------------#
Na parte if [ -e "$montado" ]; .... coloca o "z" no lugar do "e"?
Não!
-z, testa se a variável é nula,
Coloque -n, para testar se a variável não é nula....
Caso use o '-z', negue o 'if'
if ! [ -z $montado];then....

Não vejo a necessidade de testar somente os discos montados, eu testaria todos.....
E não as partições, o disco em si!
______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver


Achei um problema: Alterei de "Disk" para "Disco" na parte do fdisk

Na verificação "smartctl -H" usa um laço while pegando os HDs em /tmp/verifica.log

depois usa o if para verificar se é verdadeiro ou falso o "smartctl -H"


Pega todos os usuários do sistema /tmp/usuarios.log usa um laço while para enviar o aviso de HDs ruim para eles.


Problema:

No sistema existem os usuários (Goku, Ana, Bruno, Aline, Root...) Se eu chamo o script usando o usuário Goku o aviso dos outros usuários aparece no usuário Goku também.





while read linha; do

smartctl -H "$linha" | grep -i PASSED >> /dev/null

if [ "$?" != "0" ] ; then



while read usuario; do


su "$usuario" -c "notify-send --icon=important -t $tempo 'Disco' '$usuario \nHD ruim. $mensagem ' "

done < /tmp/usuarios.log


fi


done < /tmp/verifica.log



5. Re: Verificar HD ruim e informar via notify-send para todos os usuários do sistema

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 04/07/2021 - 00:41h

Sugestão:
smartctl -H "$linha" | grep -i PASSED >> /dev/null
smartctl -H "$linha" | if grep -i 'PASSED' >> /dev/null;then
avisa usuário
fi
----------------------------------------------------------------------------------------------------------------
Não entendi essa parte:
Se eu chamo o script usando o usuário Goku o aviso dos outros usuários aparece no usuário Goku também.
Tá chamando o script com parâmetro?
----------------------------------------------------------------------------------------------------------------
O laço manda notificação para todos:
while read usuario; do
su "$usuario" -c "notify-send --icon=important -t $tempo 'Disco' '$usuario \nHD ruim. $mensagem ' "
done < /tmp/usuarios.log


______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver



6. Re: Verificar HD ruim e informar via notify-send para todos os usuários do sistema

Morpheus
Minions

(usa Nenhuma)

Enviado em 04/07/2021 - 10:50h

msoliver escreveu:

----------------------------------------------------------------------------------------------------------------
Não entendi essa parte:
Se eu chamo o script usando o usuário Goku o aviso dos outros usuários aparece no usuário Goku também.
----------------------------------------------------------------------------------------------------------------
O laço manda notificação para todos:
while read usuario; do
su "$usuario" -c "notify-send --icon=important -t $tempo 'Disco' '$usuario \nHD ruim. $mensagem ' "
done < /tmp/usuarios.log


outros usuários na tela preta do ctrl+alt+f2...., não aparece no desktop deles o aviso via notify-send.

Notificação (notify-send) não funciona pelo usuário Root


7. Re: Verificar HD ruim e informar via notify-send para todos os usuários do sistema

Morpheus
Minions

(usa Nenhuma)

Enviado em 04/07/2021 - 11:39h


# No caso do usuário master não aparece o aviso do notify-send


# w
11:36:06 up 8 min, 2 users, load average: 1,18, 0,62, 0,39
USUARIO TTY DE [email protected] OCIOSO JCPU PCPU O QUE
master tty1 - 11:30 5:48 0.36s 0.00s xinit /etc/X11/xinit/xinitrc -- /usr/bin/X :1 -auth /home/master/.serverauth.
Goku pts/1 :0.0 11:29 1.00s 0.05s 1.07s /usr/bin/xfce4-terminal


Esta aparecendo 2x o notify-send na tela do desktop para o usuário Goku


8. Re: Verificar HD ruim e informar via notify-send para todos os usuários do sistema

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 04/07/2021 - 16:39h

Minions escreveu:

msoliver escreveu:

----------------------------------------------------------------------------------------------------------------
Não entendi essa parte:
Se eu chamo o script usando o usuário Goku o aviso dos outros usuários aparece no usuário Goku também.
----------------------------------------------------------------------------------------------------------------
O laço manda notificação para todos:
while read usuario; do
su "$usuario" -c "notify-send --icon=important -t $tempo 'Disco' '$usuario \nHD ruim. $mensagem ' "
done < /tmp/usuarios.log


outros usuários na tela preta do ctrl+alt+f2...., não aparece no desktop deles o aviso via notify-send.

Notificação (notify-send) não funciona pelo usuário Root

--------------------------------------------------------------------------------
outros usuários na tela preta do ctrl+alt+f2...., não aparece no desktop deles o aviso via notify-send.
Pelo que entendi, o notify-send, manda mensagem somente para o 'X', se não tem modo GRÁFICO, não recebe a mensagem.
Nesse caso , mande a mensagem para o terminal....

______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'



9. Re: Verificar HD ruim e informar via notify-send para todos os usuários do sistema

Morpheus
Minions

(usa Nenhuma)

Enviado em 04/07/2021 - 20:13h


msoliver escreveu:


outros usuários na tela preta do ctrl+alt+f2...., não aparece no desktop deles o aviso via notify-send.
Pelo que entendi, o notify-send, manda mensagem somente para o 'X', se não tem modo GRÁFICO, não recebe a mensagem.
Nesse caso , mande a mensagem para o terminal....




Depois do ctrl+alt+f2 usa o startx para entrar no modo GRÁFICO

# w
20:11:01 up 4:57, 2 users, load average: 1,41, 0,86, 0,67
USUARIO TTY DE [email protected] OCIOSO JCPU PCPU O QUE
master tty1 - 20:03 7:09 0.38s 0.00s xinit /etc/X11/xinit/xinitrc -- /usr/bin/X :1 -auth /home/master/.serverauth.
Goku pts/1 :0.0 20:04 3.00s 0.08s 1.01s /usr/bin/xfce4-terminal

Mesmo assim o usuário master acima não recebe a mensagem no desktop.