Como detecto quando o sistema é suspenso?

5

Eu preciso ser capaz de registrar os horários em que um sistema Ubuntu 10.04 Desktop é suspenso e reiniciado.

Eu posso detectar quando o sistema é retomado por meio de um sinal DBus (org.freedesktop.UPower.Resuming ()), mas o sinal "org.freedesktop.UPower.Sleeping ()" correspondente nunca é disparado. Idealmente, eu gostaria de usar o DBus, mas dada a falta de sucesso que estou tendo, eu ficaria feliz com qualquer solução, desde que possa ser chamado a partir da linha de comando.

Eu descobri uma maneira de fazer isso:

tail -f /var/log/pm-suspend.log | grep "executar suspender"

Isso simplesmente escuta um dos logs de pm do log de suspensão. Embora isso funcione, é provavelmente bastante frágil. Descobri que a análise de logs é bastante problemática no passado devido a alterações nas instruções de log.

Idealmente, gostaria de um mecanismo mais robusto. O serviço que invoca isso será executado como root.

    
por Paul Robinson 18.10.2010 / 15:42

2 respostas

7

Tente colocar o seguinte em /etc/pm/sleep.d . Isso deve ser independente de se sua máquina usa APM ou ACPI.

#!/bin/sh

LOGFILE="/var/log/sleep.log"

case "" in
        resume)
                echo "Resumed from suspend at 'date'" >> "$LOGFILE"
                ;;
        thaw)
                echo "Resumed from hibernation at 'date'" >> "$LOGFILE"
                ;;
        suspend)
                echo "Suspended to ram at 'date'" >> "$LOGFILE"
                ;;
        hibernate)
                echo "Hibernated to disk at 'date'" >> "$LOGFILE"
                ;;
esac
    
por Ryan Thompson 18.10.2010 / 17:22
1

Você pode soltar um script em /etc/apm/suspend.d . Deve ser executado toda vez que a máquina for suspensa.

Você também pode usar /etc/apm/resume.d de maneira semelhante para executar um script quando ele for ativado.

    
por Javier Rivera 18.10.2010 / 15:48