我正在将 top 命令输出写入文本文件。 我正在尝试编写一个简单的 bash 脚本来计算已用内存的百分比并发送一个 如果内存使用百分比超过 90%,则发送电子邮件。
这是我到目前为止的 bash 脚本。
#!/bin/bash
top -n 1 -b | grep "Mem" > /home/modadm/top-output.txt
MAXMEM=/home/modadm/top-output.txt | grep "Mem" | cut -c 7-14
USEDMEM=/home/modadm/top-output.txt | grep "Mem" | cut -c 25-31
$USEDPCT='echo $USEDMEM / $MAXMEM * 100 | bc'
$USEDPCT | mail -s "Test Email from MOD Server" test@test.com
当我保存并执行脚本时,出现错误“没有这样的文件或目录”:
-bash-3.2$ ./memcheck.sh
./memcheck.sh: line 4: =echo $USEDMEM / $MAXMEM * 100 | bc: No such file or directory
Null message body; hope that's ok
-bash-3.2$
有人可以帮忙吗?我是 bash 脚本的新手,这是我的第一个脚本。
谢谢
最佳答案
其他答案的内容我就不重复了;相反,当您需要的只是有关系统内存使用情况的信息时,我会质疑解析 top
输出的智慧。
top
的输出是供人类使用的,还包含许多不需要且生成成本很高的每个进程的信息。 free
的输出更适合这种特殊用途。
其次,根据您脚本中的计算判断,您似乎不了解在 Linux 和其他类 Unix 系统上测量系统内存使用的方式。与其他 操作系统相反,已用内存大小包含用于磁盘缓存和其他缓冲区的内存。在任何已经启动一段时间的系统上,空闲内存趋于零 - 未使用的内存是浪费的内存。
找出进程使用的内存量的第一步是从已用内存大小中减去用于缓冲区的内存量。但即使是这样在现代系统上也是不够的——即使是 free
和 top
也会在一定程度上出错,如 this older answer of mine 中所述。 .
关于linux - 使用 LINUX top 命令计算已用内存百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12118767/