我编写了一个简短脚本,用于比较free -m
命令报告的可用RAM量与所用交换量,并且如果有足够的空间交换+ 128M(以补偿瞬时增加在发出命令的准确时间交换使用),将交换的数据移回RAM中。问题是无论我使用多少RAM,该脚本都会返回“没有足够的内存空间来解锁”。我把echo
命令和数学作品放在一起,所以我认为它与if ((diff > 128)); then
系列有关。如果有人能够看一看,我会很感激。Bash脚本忽略if,then语句;每次都返回相同的结果
注意:我想在虚拟化服务器上使用带有cron作业的脚本,以便在有空间的情况下返回已交换到内存的KVM机器。由于我的服务器也是我尝试使用新发行版的地方,因此我的RAM使用情况往往会出现周期性峰值。因此,很少使用像ownCloud这样的虚拟机偶尔会被换掉,但在我或其他人需要某些东西之前不会再回来,然后我收到投诉他们已经损坏或非常缓慢。
#!/bin/bash
# This script moves data from swap back into RAM
meminfo=$(mktemp -d -t meminfo.XXXXXX)
cd $meminfo
info=$(mktemp info.XXXXXX)
swapline=$(mktemp swapline.XXXXXX)
freeline=$(mktemp freeline.XXXXXX)
free -m > info
exec 0< info
sed -n '2p' info > freeline
less freeline | while read -a values;
do
free=${values[3]}
cached=${values[6]}
avail=$[$free+$cached]
done
sed -n '4p' info > swapline
less swapline | while read -a bytes;
do
swap=${bytes[2]};
done
diff=$((avail - swap))
if ((diff > 128)); then
echo "unswapping"
swapoff -a
swapon /dev/sda2
else
echo "Not enough room in memory to unswap"
fi
rm -r $meminfo
#
这里是free -m
的当前输出;该脚本仍然不起作用。
total used free shared buffers cached
Mem: 3019 2930 88 12 49 851
-/+ buffers/cache: 2029 989
Swap: 1928 165 1763
是否尝试'echo $ diff',在if((diff> 128))之前; then'。这是什么说 – MSameer
检查尾随空格... bash不容忍这一点。 – zee
@MSameer刚刚尝试过,它给了我'0没有足够的空间在内存中去掉“。所以问题在于减法。也许是语法错误? –