#!/bin/bash # Script: calculate_workhours_pc.sh # Descripción: Este script muestra el tiempo que el sistema ha estado encendido # entre los eventos de "reboot" (reinicio) y "shutdown" (apagado). # Utiliza los registros de "last -x" para obtener las fechas y # horas de los reinicios y apagados del sistema. Luego calcula # y muestra la duración de cada sesión (el tiempo entre encendido y apagado) # en un formato de horas, minutos y segundos. Al final, también # muestra el tiempo total acumulado que el sistema ha estado encendido # desde el primer reinicio. # Author: Manuel Vergara # Web: https://vergaracarmona.es # # Cabecera printf "%-25s %-25s %-20s\n" "Encendido" "Apagado" "Tiempo activo" printf "%-25s %-25s %-20s\n" "----------" "--------" "--------------" # Usamos `tac` para invertir el orden de `last -x` last -x | tac | awk ' /reboot/ { boot = $6" "$7" "$8 next } /shutdown/ && boot != "" { shut = $6" "$7" "$8 cmd1 = "date -d \""boot"\" +%s"; cmd1 | getline t1; close(cmd1); cmd2 = "date -d \""shut"\" +%s"; cmd2 | getline t2; close(cmd2); delta = t2 - t1 if (delta > 0) { h = int(delta / 3600) m = int((delta % 3600) / 60) s = delta % 60 printf "%-25s %-25s %02d:%02d:%02d\n", boot, shut, h, m, s total += delta } boot = "" } END { h = int(total / 3600) m = int((total % 3600) / 60) s = total % 60 printf "\n%-51s %02d:%02d:%02d\n", "Tiempo total encendido:", h, m, s }'