Em uma linha:
if [[ $(swapon -s | grep -v Size | awk '{print $4/$3*100}'| awk -F "." '{print $1}') -ge 85 ]]; then echo 'Swap alert'|wall -n;fi
Você pode testá-lo alterando 85
para outro valor para ter certeza de que funciona.
cat /proc/meminfo | grep Swap
SwapCached: 460248 kB
SwapTotal: 8388600 kB
SwapFree: 1031900 kB
Eu quero usar essas informações para compará-las com um valor limite. Quando o limite é atingido, um aviso deve ser enviado. Eu poderia obter alguma ajuda sobre isso?
Em uma linha:
if [[ $(swapon -s | grep -v Size | awk '{print $4/$3*100}'| awk -F "." '{print $1}') -ge 85 ]]; then echo 'Swap alert'|wall -n;fi
Você pode testá-lo alterando 85
para outro valor para ter certeza de que funciona.
Estritamente para "buscar os números", eu usaria:
$ grep Swap /proc/meminfo | tr -d "[a-zA-Z :]"
7228
3141628
3091688
Ou, se você precisar dos valores em uma linha:
$ echo 'grep Swap /proc/meminfo | tr -d "[a-zA-Z :]"'
7228 3141628 3091688
Você poderia começar com algo como abaixo:
#!/bin/bash
totalSwap=$(cat /proc/meminfo | sed -n 's/^SwapTotal: \+\([0-9]\+\) \+[a-zA-Z]\+$//p')
freeSwap=$(cat /proc/meminfo | sed -n 's/^SwapFree: \+\([0-9]\+\) \+[a-zA-Z]\+$//p')
usedSwap=$(( $totalSwap - $freeSwap ))
usedPctSwap=$(( 100 * $usedSwap / $totalSwap ))
swapThreshold=85
if [[ $usedPctSwap -gt $swapThreshold ]]
then
echo "Swap utilisation is at $usedPctSwap %" | mail -s "SWAP Utilisation Alert" your.email@yourdomain
fi
Obviamente, sinta-se à vontade para mudar isso para atender às suas necessidades específicas. por exemplo. você pode ter um método de alerta que é melhor do que um simples e-mail.
Você pode agendar isso adicionando-o ao crontab
Que tal:
#!/bin/bash
threshold=$(( 8388600 * 15 / 100 ))
current=$(sed -n '/SwapFree/s/[^[:digit:]]*\([[:digit:]]*\).*//p' /proc/meminfo)
[[ $current -lt $threshold ]] && echo "There is a problem" || echo "No problem"
Aqui, calculamos o limite tomando SwapFree
como referência, se a porcentagem de troca livre for menor que 15%, um alerta será enviado.
Em vez de echo "There is a problem"
, faça o que deseja fazer, como enviar um e-mail ou qualquer outra coisa.
Você deve executar isso como um trabalho cron
(pode ser a cada 5 minutos).
Você receberá total
e free
, números:
cat /proc/meminfo | #read data
grep -E "Swap((Total:)|(Free:))" | #just the two records that we need
sed -re "s/[[:blank:]]+/ /g" | #only one space field separator
cut -d" " -f2 #just the field that we need
Você então precisa fazer algo com eles. Talvez isto:
(cat /proc/meminfo |
grep -E "Swap((Total:)|(Free:))" |
sed -re "s/[[:blank:]]+/ /g" |
cut -d" " -f2 &&
echo "100 * r / 100 r - p" ) |
dc
Tags shell