Linux-Rechner herunterfahren und zu bestimmter Zeit starten

Uhr

Bei meinem Arbeitgeber, KIJ denkt man derzeit vermehrt über das Thema Energiesparen nach.

Unter anderem wurde über die Sinnhaftigkeit des Rechner-Ausschaltens-zum-Feierabend diskutiert.

Als umweltbewusster Mitarbeiter mache ich das schon lange, jedoch gibt es ein Problem:

Wenn man vom Home-Office aus auf seinen Rechner im Büro zugreifen will, muss dieser irgendwie wieder angeschaltet werden.

Mein erster Ansatz dazu war, im BIOS Aufweck-Zeiten einzustellen:
Mein Arbeitsplatz-Rechner schaltete sich damit jeden Montag, Dienstag und Mittwoch jeweils um 8 Uhr wieder an.

Das funktionierte auch gut, nur leider startete der Rechner damit auch, wenn ich z. B. im Urlaub war. Und ich konnte ihn nicht starten, wenn ich ihn mal ausnahmsweise an einem Donnerstag brauchte.

Eine flexiblere Lösung musste her.

Moderne Rechner bieten dafür die Möglichkeit, aus dem laufenden Betriebssystem mittels ACPI Aufweckzeiten zu setzen. Das kann man sich unter Linux mit zwei einfachen Skripten zunutze machen:

1. pickTime

Dieses Bash-Skript zeigt einen Dialog an, mit dem ich Datum und Uhrzeit, zu welchem der Rechner das nächste mal aufwachen soll, auswählen kann:

#!/bin/bash

type zenity >/dev/null || pkexec apt-get install zenity || exit

function showHelp(){
    NAME=$(basename $0)
    echo ==== $NAME ====
    echo
    echo GUI for picking a time stamp
    echo
    echo By default, the timestamp refers to the closest match of the selected datetime in the future.
    echo Use the following options to alter this behaviour:    
    echo '-d | --date              : do not select closes matching time in future, but ask for a date'
    echo '-h | --help              : show this help text'
    echo '-s | --subject <subject> : set a subject in the window title'
}

SUBJECT=""
PICKDATE=0
while [ "$1" ]; do
    case "$1" in
    -h|--help)
        showHelp
        exit 0
        ;;
    -d|--date)
        PICKDATE=1
        ;;
    -s|--subject)
        shift
        SUBJECT="$1"
        ;;
    esac
    shift
done

DAY=$(date +%Y-%m-%d)
if [ $PICKDATE -eq 1 ]; then
    DAY=$(zenity --calendar \
         --title "Select day" \
         --text "$SUBJECT" \
         --date-format %Y-%m-%d)    
fi

HOUR=$(zenity --list \
          --title "Select hour" \
          --text "$SUBJECT" \
          --radiolist \
          --column "Pick" \
          --column "Hour" \
FALSE 00 FALSE 01 FALSE 02 FALSE 03 FALSE 04 FALSE 05 FALSE 06 FALSE 07 TRUE 08 FALSE 09 FALSE 10 FALSE 11 \
FALSE 12 FALSE 13 FALSE 14 FALSE 15 FALSE 16 FALSE 17 FALSE 18 FALSE 19 FALSE 20 FALSE 21 FALSE 22 FALSE 23)

if [ "$HOUR" = "" ]; then
        exit -1
fi

MINUTE=$(zenity --list \
        --title "Select minute" \
        --text "$SUBJECT" \
        --radiolist \
        --column "Pick" \
        --column "Minute" \
TRUE 00 FALSE 05 FALSE 10 FALSE 15 FALSE 20 FALSE 25 FALSE 30 FALSE 35 FALSE 40 FALSE 45 FALSE 50 FALSE 55)

if [ "$MINUTE" = "" ]; then
    exit -1
fi

STAMP=$(date +%s -d "$DAY $HOUR:$MINUTE")

if [ $PICKDATE -eq 0 ]; then
    if [ $(date +%s) -gt $STAMP ]; then
    let STAMP=$STAMP+86400
    fi
fi
echo $STAMP

2. waketime

Dieses Skript ruft den Auswahldialog auf, holt sich von diesem einen Zeitstempel für den nächsten Neustart und meldet diesen dem Basis-System. Danach wird der Rechner heruntergefahren und startet zum festgelegten Zeitpunkt neu.

#!/bin/bash
TIME=$(pickTime -d -s "Zeit für nächsten Neustart auswählen.")
echo Rechner wird heruntergefahren und $(date -d @$TIME) neu gestartet…
sudo rtcwake -m off -uv -t $TIME 

Neuen Kommentar hinzufügen

Eingeschränktes HTML

  • Erlaubte HTML-Tags: <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Zeilenumbrüche und Absätze werden automatisch erzeugt.
  • Website- und E-Mail-Adressen werden automatisch in Links umgewandelt.