Como manter um log de ‘registro de tempo de atividade’ no Debian?

Como manter um log de ‘registro de tempo de atividade’ no Debian?

Atualmente, meu servidor envia meu tempo de atividade para uma página HTML usando:

TIME=$(uptime -p) echo ""${TIME}"!" >> /var/www/html/index.new

O que gera uma saída de:

até 1 dia, 1 hora, 2 minutos!

Eu também gostaria (por uma questão de curiosidade) de poder exibir o tempo de atividade do registro do meu sistema, embora não tenha certeza sobre a melhor maneira de registrar isso e exibi-lo novamente no (uptime -p) [dia, hora, min ] formato.

Existe uma ferramenta pré-existente que pode fazer isso? Ou eu precisaria registrar o tempo de atividade em um arquivo e extrair o valor mais alto com grep ou algo semelhante?

Responder1

Depois de instalar o 'uptimed', adicionei as seguintes linhas ao meu script:

uprecords | head -n 4 | tail -n 1 | awk '{print "Current uptime record is " $3,$4$5,$6" (hr:mis:sec)"}'

O registro de tempo de atividade atual é de 1 dia, 02:05:34 (h:min:seg)

Isso deve ser mais do que adequado às minhas necessidades.

Responder2

Eu sugeriria usar o -ssinalizador para obter um horário analisável de quando o sistema foi iniciado. E então use datee subtraia.

Continue fazendo isso em loop e compare com o registro. O tempo recorde precisa ser salvo em arquivo, é claro.

(O arquivo de registro precisa ser inicializado. echo 0 > record)

Enquanto esse script continuar em execução, qualquer coisa poderá simplesmente ler o arquivo de registro para descobrir qual é o registro atual.

#!/bin/sh

format_time ()
{
    t=$1

    days=$(($t / 86400))
    t=$(($t - 86400*$days))

    hours=$(($t / 3600))
    t=$(($t - 3600*$hours))

    minutes=$(($t / 60))
    t=$(($t - 60*$minutes))

    echo "$days days $hours hours $minutes minutes $t seconds"
}

main ()
{
    # Old record
    record="$(cat record)"

    # When the system started.
    boot="$(date -d "$(uptime -s)" '+%s')"
    while true; do
        # You could also calculate the uptime before the loop and just
        # increment it, but that will rely on the script running 24/7.
        now="$(date '+%s')"
        current_uptime="$(($now - $boot))"
        # Set and save the record when it gets beaten
        if [ "$current_uptime" -gt "$record" ]; then
            record="$current_uptime"
            echo "$record" > record
        fi
        # Status should be printed _after_ potentially having set
        # a new record:
        clear
        echo "Current uptime: $(format_time "$current_uptime")"
        echo "Record uptime: $(format_time "$record")"
        # Don't waste system resources for silly things.
        sleep 1
    done
}

main

Responder3

Como você já está usando uptimed, você também pode instalaruprecords-cgique apresenta as informações armazenadas uptimedem uma página web; por padrão, ele será ativado emhttp://localhost/cgi-bin/uprecords.cgi.

informação relacionada