我編寫了一個簡短腳本,用於比較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沒有足夠的空間在內存中去掉「。所以問題在於減法。也許是語法錯誤? –