#!/bin/bash
df -m > myfile
server_ip_address=$(ip addr show $(ip route | awk '/default/ { print $5 }') | grep "inet" | head -n 1 | awk '/inet/ {print $2}' | cut -d'/' -f1)
if awk '$2 > 10000 && $5 > 90' myfile ; then
echo "Disk Full in $server_ip_address"
else
echo "Nothing wrong with the server"
fi
Quando executo o script, sempre obtenho o disco cheio como saída? A saída de df -m se parece com isto:
Filesystem 1M-blocks Used Available Use% Mounted on
/dev/mapper/centos-root 949305 512827 436479 55% /
devtmpfs 3811 0 3811 0% /dev
tmpfs 3823 0 3823 0% /dev/abc
tmpfs 3823 18 3806 1% /run
tmpfs 3823 0 3823 0% /sys/fs/cgroup
/dev/sda2 1014 175 840 18% /boot
/dev/sda1 1022 12 1011 2% /boot/efi
tmpfs 765 0 765 0% /run/user/2000
A saída de df -m difere de servidor para servidor. Estou comparando se Size>10GB e Use%>90%. Como alguns discos com tamanho <10 GB podem não ser importantes para menos de 90% de uso do disco.
Atualização 1:
GNU bash, versão 4.2.46(2)-release (x86_64-redhat-linux-gnu)
SO é centos 7
Problema com o código atual:
Preciso comparar da segunda linha às colunas da última linha, mas meu código atual está comparando as colunas da primeira linha, por isso suponho que não esteja funcionando. Como resolver o problema?
A resposta aqui é não usar
-H
. Conforme documentado,man df
destina-se a "saída legível por humanos" e a unidade pode variar intencionalmente.Em vez disso, use uma unidade fixa: o KB padrão ou talvez o MB (
-m
).Você também pode querer ler sobre Nagios (Icinga). Esta é uma ferramenta de monitoramento que inclui scripts para abordar exatamente o tipo de monitoramento que você está abordando.
Isso ocorre porque
if awk ...
sempre retorna verdadeiro, porqueawk
sempre termina com êxito, a menos que encontre um erro ao tentar executar seu script (arquivo não encontrado, erro de sintaxe etc.)Eu estaria inclinado a considerar escrever o roteiro assim