Vor langer Zeit hatte ich mal ein Skript geschrieben, welches bei
meinem Linux-System die Akku-Kapazität prüft (jede Minute per cron Job).
Sobald die Kapazität unter 10% sinkt, wird das System mit einer
Hinweismeldung heruntergefahren.
#!/bin/sh ######################################## # Skript faehrt System sicher herunter # # falls die Akku-Kapazitaet unter 10% # # sinkt. # # # # Skript - Version: 1.2 # # # # Autor: Ronny Friedland # ######################################## # Voraussetzung: # - installiertes und konfiguriertes ACPI # - bc # - cat # - Skript muss mit ROOT-Berechtigung ausgeführt werden # getestet unter: # - DEBIAN 3.1 / 4.0 STATE_CAP='' STATE_CHARGE="charg" # IF-Abfrage, ob Batteriebetrieb if [ $STATE_CAP = $(cat /proc/acpi/battery/BAT0/state | grep 'remaining capacity') 2> /dev/null ]; then { echo "kein Batteriebetrieb" > /dev/null } else { # Falls Akku gerade geladen wird if [ $STATE_CHARGE = $(cat /proc/acpi/battery/BAT0/state | grep charging | cut -c26-30) ]; then { echo "Batterie wird geladen" > /dev/null } # berechnen der kritischen Grenze - Standard: 10% elif [ 10 -gt $(echo $(echo $(cat /proc/acpi/battery/BAT0/state | grep remaining | cut -c26-29) '* 100' | bc ) / $(cat /proc/acpi/battery/BAT0/info | grep 'last full' | cut -c26-29) | bc) ]; then { if [ "ps a | grep shutdown | cut -c28-35" != "shutdown" ]; then # Warnmeldung ausgeben und System mit einer Minute Verzoegerung herunterfahren /sbin/shutdown -h +1 "Batteriestatus kritisch - System wird heruntergefahren !!!" fi #if [ "$DISPLAY" == "" ]; then #xmessage "Batteriestatus kritisch - System wird heruntergefahren !!!" #fi } else { # Beim Aufruf des Skriptes wird der aktuelle Batteriestatus in das File '/var/log/messages' geleitet echo $(date) 'Batterie-Kapazitaet:' $(echo $(echo $(cat /proc/acpi/battery/BAT0/state | grep remaining | cut -c26-29) '* 100' | bc ) / $(cat /proc/acpi/battery/BAT0/info | grep 'last full' | cut -c26-29) | bc) '%' >> /var/log/messages } fi } fi ######################################## # Skript - Ende # ########################################
Ich habe mir die Konsole 10 (unter Debian standardmäßig frei) so eingerichtet, dass mir dort der Inhalt von /var/log/messages ausgegeben wird.
tail -f /var/log/messages > /dev/tty10
Das Skript läuft per cron jede Minute:
*/1 * * * *
Ab Debian 6.0 funktioniert das Skript nicht mehr, da das ACPI nicht mehr kompatibel mit der vorherigen Version ist. Daher musste ich das Skript wie folgt anpassen:
#!/bin/sh ######################################## # Skript faehrt System sicher herunter # # falls die Akku-Kapazitaet unter 10% # # sinkt. # # # # Skript - Version: 2.0 # # # # Autor: Ronny Friedland # ######################################## # Systemvoraussetzung: # - installiertes und konfiguriertes ACPI # - bc Rechner # - cat - Befehl # - ROOT-Berechtigung # getestet unter: # - DEBIAN 6.0 SQUEEZE dt # - ACPI - Version: 20090903 CURRENT=`cat /sys/class/power_supply/BAT0/energy_now` MAX=`cat /sys/class/power_supply/BAT0/energy_full` STATE=`cat /sys/class/power_supply/BAT0/status` SHUTDOWN_PROCESS=`ps a | grep shutdown | wc -l` # IF-Abfrage, ob Batteriebetrieb if [ $STATE = 'Charging' ]; then { echo "kein Batteriebetrieb, Akku wird geladen" > /dev/null } else { # berechnen der kritischen Grenze - Standard: 10% if [ 10 -gt $(($CURRENT * 100 / $MAX)) ]; then { if [ 1 -lt $($SHUTDOWN_PROCESS) ]; then # Warnmeldung ausgeben und System mit einer Minute Verzoegerung herunterfahren /sbin/shutdown -h +1 "Batteriestatus kritisch - System wird heruntergefahren !!!" fi #if [ "$DISPLAY" == "" ]; then #xmessage "Batteriestatus kritisch - System wird heruntergefahren !!!" #fi } else { # Beim Aufruf des Skriptes wird der aktuelle Batteriestatus in das File '/var/log/messages' geleitet echo $(date) 'Batterie-Kapazitaet:' $(($CURRENT * 100 / $MAX)) '%' >> /var/log/messages } fi } fi ######################################## # Skript - Ende # ########################################