
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 -s
sinalizador para obter um horário analisável de quando o sistema foi iniciado. E então use date
e 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-cgi
que apresenta as informações armazenadas uptimed
em uma página web; por padrão, ele será ativado emhttp://localhost/cgi-bin/uprecords.cgi.