O comando 'uptime' retorna 'média'

2

Eu escrevi um script bash simples que verifica os valores médios de carga usando 'uptime' a cada 5 minutos e grava um resultado no arquivo de texto. Tudo está OK, exceto uma coisa: todos os dias, das 12:00 às 13:00, vejo o valor do texto "média" em vez de valores inteiros regulares.

Como devo interpretar a 'média' como resultado do comando 'uptime'? E se eu correr 'uptime' da linha de comando, tudo está OK - vejo valores inteiros regulares.

O código-fonte abaixo:

#!/bin/bash

sCurrentUptime="$(uptime | awk '{print $10}')"
iLength="${#sCurrentUptime}"
sUptime="${sCurrentUptime:0:iLength-1}"
iUptime=${sUptime/.*}
now="$(date)"
echo $now';'$iUptime

E aqui estão as saídas (os últimos collumns contêm o valor médio da carga):

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
    
por Vlad Chaotic 27.04.2014 / 16:25

2 respostas

4

A saída do tempo de atividade depende do próprio tempo de atividade, ou seja,

Em um sistema

$ uptime
17:35pm  up 5 days  9:24,  9 users,  load average: 0.30, 0.28, 0.28

assim, 12 campos.

Em outro sistema

uptime
17:36:15 up  8:44,  2 users,  load average: 0.09, 0.30, 0.41

E assim 10 campos. Pode adiar para o seu sistema, é claro. Eu suponho que você ligou sua máquina ao meio-dia, o que leva a um tempo de atividade de N dias e 0 horas, onde o último não é exibido (ou algo parecido).

Como parece que você quer ter a última coluna, você pode substituir o comando awk por

uptime | awk '{print $NF}'

NF é o número de campos e $NF , portanto, o último campo da linha. Acho que isso é mais à prova de erros.

Se você quer a primeira média de carga, em vez da terceira, então você pode fazer

uptime | awk '{print $(NF-2)}'
    
por 27.04.2014 / 17:38
1

Para fins de script, é mais fácil obter as médias de carga diretamente de /proc/loadavg para tentar analisar a saída irritante de uptime .

Exemplo

$ cat /proc/loadavg
1.08 0.77 0.85 2/838 16771

De 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.
    
por 27.04.2014 / 20:32

Tags