
Actualmente, mi servidor envía mi tiempo de actividad a una página HTML usando:
TIME=$(uptime -p) echo ""${TIME}"!" >> /var/www/html/index.new
Lo que genera una salida de:
¡hasta 1 día, 1 hora, 2 minutos!
También me gustaría (por curiosidad) poder mostrar el tiempo de actividad registrado de mi sistema, aunque no estoy seguro de cuál es la mejor manera de registrarlo y mostrarlo nuevamente en (uptime -p) [día, hora, minuto ] formato.
¿Existe alguna herramienta preexistente que pueda hacer esto? ¿O necesitaría registrar el tiempo de actividad de un archivo y extraer el valor más alto con grep o algo similar?
Respuesta1
Después de instalar 'uptimed', agregué las siguientes líneas a mi script:
uprecords | head -n 4 | tail -n 1 | awk '{print "Current uptime record is " $3,$4$5,$6" (hr:mis:sec)"}'
El registro de tiempo de actividad actual es de 1 día, 02:05:34 (hr:min:seg)
Esto debería ser más que adecuado para mis necesidades.
Respuesta2
Sugeriría usar la -s
bandera para obtener una hora analizable de cuándo se inició el sistema. Y luego usar date
y restar.
Continúe haciendo esto en bucle y compárelo con el registro. Por supuesto, el tiempo récord debe guardarse en un archivo.
(Es necesario inicializar el archivo de registro echo 0 > record
) .
Mientras este script siga ejecutándose, cualquier cosa puede simplemente leer el archivo de registro para averiguar cuál es el registro actual.
#!/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
Respuesta3
Como ya estás usando uptimed
, también puedes instalaruprecords-cgi
que presenta la información almacenada uptimed
en una página web; por defecto estará habilitado enhttp://localhost/cgi-bin/uprecords.cgi.