私は "uptime"を使って5分ごとにロード平均をチェックし、結果をテキストファイルに書き込む単純なbashスクリプトを書いた。 1つを除いて、すべてが大丈夫です。毎日12:00から13:00まで、通常の整数値の代わりに「平均」というテキスト値が表示されます。
「uptime」コマンドの「平均」結果をどのように解釈する必要がありますか?コマンドラインで "uptime"を実行すると、すべてがうまく機能します。一般的な整数値が表示されます。
ソースコードは次のとおりです。
#!/bin/bash
sCurrentUptime="$(uptime | awk '{print $10}')"
iLength="${#sCurrentUptime}"
sUptime="${sCurrentUptime:0:iLength-1}"
iUptime=${sUptime/.*}
now="$(date)"
echo $now';'$iUptime
出力は次のとおりです(最後の列には負荷平均が含まれています)。
Thu Apr 17 08:40:01 MSK 2014;0
Thu Apr 17 09:00:01 MSK 2014;2
Thu Apr 17 09:20:02 MSK 2014;3
Thu Apr 17 09:40:02 MSK 2014;3
Thu Apr 17 10:00:01 MSK 2014;2
Thu Apr 17 10:20:01 MSK 2014;3
Thu Apr 17 10:40:01 MSK 2014;1
Thu Apr 17 11:00:02 MSK 2014;2
Thu Apr 17 11:20:01 MSK 2014;3
Thu Apr 17 11:40:01 MSK 2014;2
Thu Apr 17 12:00:02 MSK 2014;3
Thu Apr 17 12:20:02 MSK 2014;average
Thu Apr 17 12:40:01 MSK 2014;average
Thu Apr 17 13:00:01 MSK 2014;average
Thu Apr 17 13:20:01 MSK 2014;3
Thu Apr 17 13:40:01 MSK 2014;1
Thu Apr 17 14:00:01 MSK 2014;2
Thu Apr 17 14:20:01 MSK 2014;3
Thu Apr 17 14:40:01 MSK 2014;2
Thu Apr 17 15:00:01 MSK 2014;2
Thu Apr 17 15:20:01 MSK 2014;3
Thu Apr 17 15:40:01 MSK 2014;1
答え1
稼働時間の出力は、稼働時間自体によって異なります。
システムへ
$ uptime
17:35pm up 5 days 9:24, 9 users, load average: 0.30, 0.28, 0.28
したがって、12のフィールドがあります。
他のシステムでは
uptime
17:36:15 up 8:44, 2 users, load average: 0.09, 0.30, 0.41
だから10のフィールドがあります。もちろん、システムによっては遅れることがあります。私はあなたが正午にコンピュータの電源を入れたと仮定します。その結果、稼働時間はN日0時間になり、これは表示されません(または同様のもの)。
とにかく最後の列が欲しいので、awk
コマンドを次のように置き換えることができます。
uptime | awk '{print $NF}'
NF
フィールド数なので、$NF
行の最後のフィールドです。これはエラー防止に適していると思います。
最初の負荷平均が必要ですが、3番目の負荷平均が望ましくない場合は、次のことができます。
uptime | awk '{print $(NF-2)}'
答え2
スクリプトの目的では、不快な出力を/proc/loadavg
解析するために負荷平均を取得する方が簡単です。uptime
はい
$ cat /proc/loadavg
1.08 0.77 0.85 2/838 16771
からman proc
:
/proc/loadavg
The first three fields in this file are load average figures
giving the number of jobs in the run queue (state R) or waiting for
disk I/O (state D) averaged over 1, 5, and 15 minutes. They are
the same as the load average numbers given by uptime(1) and other
programs. The fourth field consists of two numbers separated by a
slash (/). The first of these is the number of currently runnable
kernel scheduling entities (processes, threads).
The value after the slash is the number of kernel scheduling
entities that currently exist on the system. The fifth field is
the PID of the process that was most recently created on the system.