命令“正常运行时间”返回“平均”

命令“正常运行时间”返回“平均”

我编写了一个简单的 bash 脚本,该脚本每 5 分钟使用“正常运行时间”检查一次负载平均值,并将结果写入文本文件。一切都很好,除了一件事:每天 12:00 到 13:00 我看到文本值“平均”而不是常规整数值。

我应该如何解释“正常运行时间”命令的“平均”结果?如果我从命令行运行“正常运行时间”,一切正常 - 我看到常规整数值。

源码如下:

#!/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的输出取决于uptime本身,即

在一个系统上

$ 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因此也是该行的最后一个字段。它认为这更防错。

如果您想要第一个负载平均值,而不是第三个,那么您可以这样做

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.

相关内容