consulta de tiempo de actividad/tiempo de actividad

consulta de tiempo de actividad/tiempo de actividad

Debido a que mi umpc maneja mal la suspensión/hibernación, tuve que programar un apagado después de un tiempo de inactividad.

El guión principal:

#!/bin/bash

idletime=$((15*60*1000)) # 15 min in milliseconds 
#idletime=$((5*20*330)) # about one minute, for testing 
idle=0
while [ $idle -lt $idletime ];do     
    idle=`xprintidle` 
    sleep 1 
done 
/home/jake/Scripts_Icons/Word_Shutdown 
sleep 2 
sudo shutdown -P now

La Word_Shutdownsecuencia de comandos:

#!/bin/bash 

if test $(wmctrl -l | grep "Microsoft Word" 2>&1 | wc -l) -eq 1; then      
    wmctrl -a "Microsoft Word"     
    sleep .2     
    xdotool keydown 0xffea + key 4     
    sleep .2     
    xdotool keyup 0xffea     
    sleep .2    
    xdotool key y 
fi

Funciona, pero para controlar correctamente la duración de la batería, me gustaría que mis tiempos de actividad durante las sesiones con una carga de batería se combinen en un solo tiempo de actividad.

¿Es eso posible? Veo que tuptimemostrará el tiempo de actividad de la sesión anterior y comenzará a monitorear el tiempo de actividad de la sesión actual. ¿Hay alguna manera de combinar estas salidas en una sola lectura, por ejemplo 3hr 4 min?

La tuptimesalida del comando:

[jake@P3 ~]$  sudo tuptime -S 2 
System startups:    8  since  06:14:53 PM 06/20/2022 
System shutdowns:   0 ok  +  7 bad 
System life:            17h 50m 4s  

System uptime:          16.15%  =  2h 52m 46s 
System downtime:    83.85%  =  14h 57m 18s  

Average uptime:     21m 36s 
Average downtime:   2h 8m 11s  

Current uptime:     2h 9m 1s  since  09:55:56 AM 06/21/2022

El "tiempo de actividad del sistema" aparentemente combina todos los tiempos de actividad entre apagados.

Yo he tratado:

tuptime | awk -F'=' '/System uptime:/ {print $2}'

Funciona pero también imprime los segundos y el espacio inicial, es decir 2h 52m 46s. ¿Hay alguna manera de cortar los segundos y el espacio en blanco inicial, dejando solo las horas y los minutos, es decir 2h 52m?

¿O uptimetiene un mango que se puede mover de manera similar?

Respuesta1

Funciona, peropara controlar correctamente la duración de la batería, Me gustaría que mis tiempos de actividad durante las sesiones con una carga de batería se combinaran en un solo tiempo de actividad.

Para controlar correctamente la duración de la batería:

  • Identifique la referencia (nombre) del dispositivo de su batería de la upower -esiguiente manera:

    upower -e | grep -i "batt"
    
  • Obtenga información de la batería usando upower -ila referencia (nombre) de su batería de esta manera:

    upower -i /org/freedesktop/UPower/devices/battery_BAT0
    
  • Refina la upower -isalida para obtener soloestadoal igual que:

    awk '/state:/ {print $2}' <(upower -i /org/freedesktop/UPower/devices/battery_BAT0)
    
  • Refina la upower -isalida para obtener soloporcentajesin "%" así:

    awk '/percentage:/ {print 0+$2}' <(upower -i /org/freedesktop/UPower/devices/battery_BAT0)
    
  • Utilice el conocimiento anterior en un script que verifique cada cinco minutos para ejecutar su comando de apagado (reemplácelo # Your shutdown command herecon su comando real) cuando se cargue la batería.alcanza el 8% o menosmientras está en elestado de descargaal igual que:

#!/bin/bash

while true; do
    state="$(awk '/state:/ {print $2}' <(upower -i /org/freedesktop/UPower/devices/battery_BAT0))"
    percentage="$(awk '/percentage:/ {print 0+$2}' <(upower -i /org/freedesktop/UPower/devices/battery_BAT0))"
    [ "$state" == "discharging" ] && [ "$percentage" -le "8" ] && # Your shutdown command here
    sleep 300
done

Debido a que mi umpc maneja mal la suspensión/hibernación, tuve que programar un apagado después de un tiempo de inactividad.

El guión principal:

#!/bin/bash ...

  • Su script principal usa marcas invertidas `...` para la sustitución de comandos:

    idle=`xprintidle`
    

    Si bien seguirá funcionando, las marcas invertidas para la sustitución de comandos se consideran una característica heredada (antiguo y podría quedar obsoleto en el futuro) en bash, por lo que recomiendo usarlo $(...)así:

    idle=$(xprintidle)
    
  • La sleep 1llamada es demasiado corta para una tarea tan poco crítica... así que recomiendo extenderla para que diga 30segundos o incluso un minuto así:

    sleep 1m
    

La Word_Shutdownsecuencia de comandos:

#!/bin/bash ...

  • Su Word_Shutdownscript tiene dos problemas en esta parte:

    if test $(wmctrl -l | grep "Microsoft Word" 2>&1 | wc -l) -eq 1; then
    

    Primero, no es necesario utilizar grep "Microsoft Word" 2>&1 | wc -l... grep -c "Microsoft Word" 2>&1generará el mismo resultado.

    En segundo lugar, cite la sustitución de comandos utilizada directamente en la ifparte de evaluación para evitar una posible división de palabras de esta manera:

    if test "$(wmctrl -l | grep -c "Microsoft Word" 2>&1)" -eq 1; then
    

Yo he tratado:

tuptime | awk -F'=' '/System uptime:/ {print $2}'

Funciona pero también imprime los segundos y el espacio inicial, es decir
2h 52m 46s. ¿Hay alguna manera de cortar los segundos y el espacio en blanco inicial, dejando solo las horas y los minutos, es decir 2h 52m?

Sí, e incluso mejor y preparado para el futuro (por ejemplo, si System uptimecontiene más de 3 campos 4d 22h 31m 54s), así:

tuptime | awk '/System uptime:/  {for (i=1; i < NF; i++) {if (i > 4) {if (i < (NF - 1)) printf("%s ", $i); else print $i}}}'

El "tiempo de actividad del sistema" aparentemente combina todos los tiempos de actividad entre apagados.

Eso es correcto.

¿O el tiempo de actividad en sí tiene un control que puede moverse de manera similar?

Quizás la -sopción te resulte útil en tu caso... desdehombre tuptime:

-s| --segundos Tiempo de salida en segundos y época

Respuesta2

Tuptime podría reducir el alcance de sus informes. Como necesita el actual y solo el anterior, use tuptime -S -1, verifique que esté correcto con la salida de la tabla -t.

Y para calcular ambos tiempos de actividad juntos:

tuptime -S -1 --csv | grep 'System uptime' | cut -d\" -f6 | awk -F\m '{print $1"m"}'

Utilice la salida csv de Tuptime para analizarlo fácilmente, hacer coincidir la línea de destino, cortar el campo y extraer el texto antes de 'm'.

información relacionada