![我想设计一个脚本来发送交换使用率超过 85% 的警报](https://linux22.com/image/62640/%E6%88%91%E6%83%B3%E8%AE%BE%E8%AE%A1%E4%B8%80%E4%B8%AA%E8%84%9A%E6%9C%AC%E6%9D%A5%E5%8F%91%E9%80%81%E4%BA%A4%E6%8D%A2%E4%BD%BF%E7%94%A8%E7%8E%87%E8%B6%85%E8%BF%87%2085%25%20%E7%9A%84%E8%AD%A6%E6%8A%A5.png)
cat /proc/meminfo | grep Swap
SwapCached: 460248 kB
SwapTotal: 8388600 kB
SwapFree: 1031900 kB
我想使用此信息将其与阈值进行比较。当达到限制时,将发出警告。我可以得到任何帮助吗?
答案1
一行:
if [[ $(swapon -s | grep -v Size | awk '{print $4/$3*100}'| awk -F "." '{print $1}') -ge 85 ]]; then echo 'Swap alert'|wall -n;fi
您可以测试它更改85
为其他值以确保它有效。
答案2
严格来说,为了“获取数字”,我会使用:
$ grep Swap /proc/meminfo | tr -d "[a-zA-Z :]"
7228
3141628
3091688
或者,如果您需要一行中的值:
$ echo `grep Swap /proc/meminfo | tr -d "[a-zA-Z :]"`
7228 3141628 3091688
答案3
你可以从下面这样开始:
#!/bin/bash
totalSwap=$(cat /proc/meminfo | sed -n 's/^SwapTotal: \+\([0-9]\+\) \+[a-zA-Z]\+$/\1/p')
freeSwap=$(cat /proc/meminfo | sed -n 's/^SwapFree: \+\([0-9]\+\) \+[a-zA-Z]\+$/\1/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
显然,您可以随意更改此设置以满足您的特定需求。例如,您可能有一种比简单的电子邮件更好的提醒方法。
然后您可以通过将其添加到 crontab 来安排此操作
答案4
这将为您提供total
和free
, 数字:
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
然后你需要对他们做一些事情。也许这个:
(cat /proc/meminfo |
grep -E "Swap((Total:)|(Free:))" |
sed -re "s/[[:blank:]]+/ /g" |
cut -d" " -f2 &&
echo "100 * r / 100 r - p" ) |
dc