As falhas são que você tenta selecionar campos com, por exemplo,
CRITICAL_LIMIT='awk {'print $2'}'
sem atribuir awk
a nenhuma entrada; você aparentemente queria echo $line|
ou (em ksh bash zsh) <<<$line
, e sua sintaxe if está errada: você precisa de ((
))
para comparação aritmética, e outra coisa inteiramente para comparação de strings, e elif
em vez de %código%. Outras coisas são mais desajeitadas do que o necessário:
-
você inicialmente exclui, apenas, qualquer filesysem cuja linha de montagem inclua
elseif
. Eu gostaria de monitorar o uso do espaço no sistema de arquivos raiz. No entanto, praticamente todos os sistemas de hoje têm vários sistemas de arquivos que não são armazenados e, portanto, não têm espaço para serem monitorados:root
e/proc
geralmente,/sys
ou parte dele frequentemente, às vezes outros. Se você executar/dev
sem especificar um sistema de arquivos, ele fará todos os sistemas de arquivos significativos para você. Melhor ainda, você só se importa com os sistemas de arquivos que estão no arquivo de configuração, então faça isso. -
você
df
de cada linha e (tente) dividir desajeitadamente comread
quandoawk
puder fazer isso de graça -
você (tenta) testar apenas se o uso for igual a um limite; se, e. '/ dev / sda5' vai rapidamente de 79% para 81% sua lógica não dará um aviso para 80%. Normalmente, as pessoas querem alertas quando o uso está ou acima de um limite.
-
o script
read
e{
em um}
deve ficar entre aspas, porque as chaves são caracteres especiais para o shell (pelo menos a maioria das shells) e podem produzir resultados não intencionais e indesejados, embora não em seus casos específicos
E você ainda não tentou enviar nada por e-mail, mas isso depende do sistema e do ambiente, então deixarei isso para você.
Aplicando todos os que eu faria:
#!/bin/ksh
CONFIG_FILE=/home/oracle/files/template
<$CONFIG_FILE while read filesys warn crit; do
used=$( df -Ph "$filesys" | awk 'NR>1 {sub(/%/,"",$5);print $5}' )
if (($used >= $crit)); then echo critical $used% on $filesys
elif (($used >= $warn)); then echo warning $used% on $filesys; fi
done
Alternativamente, você pode deixar o awk
no campo 5 e usado, e fazer as comparações no valor aparado %
; são seis contra meia dúzia.