Consulta de tempo de atividade/tempo de atividade

Consulta de tempo de atividade/tempo de atividade

Como meu umpc lida mal com a suspensão/hibernação, tive que criar um script de desligamento após o tempo de inatividade.

O roteiro 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

O Word_Shutdownroteiro:

#!/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, mas para monitorar adequadamente a vida útil da bateria, gostaria que meus tempos de atividade durante as sessões com uma carga de bateria fossem combinados em um tempo de atividade.

Isso é possível? Vejo que tuptimemostrará o tempo de atividade da sessão anterior e começará a monitorar o tempo de atividade da sessão atual. Existe uma maneira de combinar essas saídas em uma única leitura, por exemplo 3hr 4 min?

A tuptimesaída do 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

O "tempo de atividade do sistema" aparentemente combina todos os tempos de atividade entre os desligamentos.

Eu tentei:

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

Funciona, mas imprime os segundos e o espaço inicial também, ou seja 2h 52m 46s, . Existe uma maneira de cortar os segundos e o espaço em branco inicial, deixando apenas as horas e os minutos, ou seja 2h 52m?

Ou uptimeele próprio tem uma alça que pode ser balançada de forma semelhante?

Responder1

Funciona, maspara monitorar a vida útil da bateria corretamente, gostaria que meus tempos de atividade durante as sessões com uma carga de bateria fossem combinados em um tempo de atividade.

Para monitorar adequadamente a vida útil da bateria:

  • Identifique a referência (nome) do dispositivo da sua bateria da upower -eseguinte forma:

    upower -e | grep -i "batt"
    
  • Obtenha informações da bateria usando upower -ia referência (nome) da sua bateria da seguinte forma:

    upower -i /org/freedesktop/UPower/devices/battery_BAT0
    
  • Refine a upower -isaída para obter apenasestadoigual a:

    awk '/state:/ {print $2}' <(upower -i /org/freedesktop/UPower/devices/battery_BAT0)
    
  • Refine a upower -isaída para obter apenaspercentagemsem "%" assim:

    awk '/percentage:/ {print 0+$2}' <(upower -i /org/freedesktop/UPower/devices/battery_BAT0)
    
  • Use o conhecimento acima em um script que verifica a cada cinco minutos para executar o comando de desligamento (substitua # Your shutdown command herepelo comando real) quando a bateria estiver carregadaatinge 8% ou menosenquanto estiver noestado de descargaigual a:

#!/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

Como meu umpc lida mal com a suspensão/hibernação, tive que criar um script de desligamento após o tempo de inatividade.

O roteiro principal:

#!/bin/bash ...

  • Seu script principal usa back ticks `...` para substituição de comando:

    idle=`xprintidle`
    

    Embora ainda funcione, os back ticks para substituição de comando são considerados um recurso legado(antigo e pode ficar obsoleto no futuro) no bash, então recomendo usar $(...)assim:

    idle=$(xprintidle)
    
  • A sleep 1chamada é muito curta para uma tarefa tão acrítica... então recomendo estendê-la para 30segundos ou até um minuto, assim:

    sleep 1m
    

O Word_Shutdownroteiro:

#!/bin/bash ...

  • Seu Word_Shutdownscript tem dois problemas nesta parte:

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

    Primeiro, você não precisa usar grep "Microsoft Word" 2>&1 | wc -l... grep -c "Microsoft Word" 2>&1produzirá o mesmo resultado.

    Segundo, cite a substituição do comando usada diretamente na ifparte de avaliação para evitar possível divisão de palavras como esta:

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

Eu tentei:

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

Funciona, mas imprime os segundos e o espaço inicial também, ou seja
2h 52m 46s, . Existe uma maneira de cortar os segundos e o espaço em branco inicial, deixando apenas as horas e os minutos, ou seja 2h 52m?

Sim, e ainda melhor e à prova de futuro (por exemplo, se System uptimecontiver mais de 3 campos, por exemplo 4d 22h 31m 54s), assim:

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

O "tempo de atividade do sistema" aparentemente combina todos os tempos de atividade entre os desligamentos.

Está correto.

Ou o próprio tempo de atividade tem uma alça que pode ser movimentada de forma semelhante?

Talvez a -sopção seja útil no seu caso... decara, hora da hora:

-s| --seconds Tempo de saída em segundos e época

Responder2

A Tuptime poderia restringir o alcance em seus relatórios. Como você precisa do atual e apenas do anterior, use tuptime -S -1, verifique se está certo com a saída da tabela -t.

E para calcular os dois tempos de atividade juntos:

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

Use a saída csv do Tuptime para analisá-lo facilmente, combinar a linha de destino, cortar o campo e extrair o texto antes de 'm'.

informação relacionada