平均負荷が特定のしきい値に達すると、Linuxデバイスはタスク/警告をトリガーするスクリプトを作成しようとします。
スクリプトは次のとおりです。
!/bin/bash
load=`echo $(cat /proc/loadavg | awk '{print $2}')`
if [ "$load" -gt 5 ]; then
echo "foo alert!"
fi
echo "System Load $(cat /proc/loadavg)"
~に帰属helloacm.comここから始めましょう。
実行するとエラーが発生します。
./foocheck.sh: line 4: [: 0.03: integer expression expected
これは意味があります。ピリオド/小数点を見て文字列を整数と比較していると思います。
これに対して私が見つけたほとんどのソリューションには、bc -l
デバイスで利用できないソリューションが含まれています。を使用せずにこれらの値を比較する方法を見つける必要がありますbc
。
答え1
比較には整数部分のみを使用できます。
load=$(awk '{print $2}' /proc/loadavg | cut -d. -f1)
答え2
awkを使用でき、awkは浮動小数点値を処理できるため、次の手順を実行します。
awk '($1>5){print("yes")}'
編集されたスクリプト:
#!/bin/bash
load=`echo $(cat /proc/loadavg | awk '{print $2}')`
loadtest=$(echo "$load" | awk '($1>5){print("yes")}')
if [ "$loadtest" = yes ]; then
echo "foo alert!"
fi
もちろん、awkを使用すると、スクリプト全体をさらに簡素化できます。
おそらく:
#!/bin/bash
awk '($2>5){print("foo alert!")}' /proc/loadavg
答え3
set -- $(cat /proc/loadavg)
load=${2/./}
if [ "$load" -ge 500 ]; then
echo alert
fi
/ procからロード平均を取得し、これらのフィールドに基づいて位置パラメータを設定します。 2番目のフィールドをつかみ、ピリオドを削除します。値(現在の数字)が500以上の場合は警告を出します。これは、(現在の)負荷平均が小数点以下の2桁まで表示されることを前提としています。ありがとう矢より良い方法を指摘してください。
答え4
bash
浮動小数点を実行できません。次の代わりにまたはをzsh
使用してください。ksh93
yash
#! /bin/zsh -
read ignore load ignore < /proc/loadavg || exit
if ((load > 5)); then
echo >&2 Alert
fi
awk
または、すでに(不要なコマンドで)次のものを使用しているからです。
#! /bin/sh -
awk '$2 > 5 {print "Alert"}' < /proc/loadavg >&2
またはsh
if
コンストラクタで必要な場合:
#! /bin/sh -
if awk '{exit !($2 > 5)}' < /proc/loadavg; then
echo >&2 Alert
fi