summaryrefslogtreecommitdiffstats
path: root/goodnight.sh
blob: 9272154568a7d388009e0dbf8ceba3881748bb8a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#!/bin/bash

# I had problems with dash so i changed to real bash


# Dieses Skript versucht so lange den Rechner herunter zu fahren, bis who keine
# User mehr anzeigt, und keine screen Sessions mehr gefunden werden.
# Wenn die Zeit erreicht ist, zu der der Rechner laufen sollte,
# beendet sich das Skript ohne den Rechner herunterzufahren.

# Zeitpunkt ab dem der Rechner an sein sollte:
SHIFTSTART='08'
# Zeitpunkt ab dem der Rechner heruntergefahren werden sollte:
SHIFTEND='20'
# shutdown Befehl
SHUTDOWN='/sbin/shutdown -h now'
# soll goodnight sagen was es tut?
DEBUG="YES"

# returns 0 (==true) if the shift has started
function shifthasstarted ()
{
    HOUR=$(date "+%k")
    if [ ${HOUR} -lt ${SHIFTEND} -a ${HOUR} -ge ${SHIFTSTART} ]; then
        return 0
    else
        return 1
    fi
}

# returns 0 if someone is logged in
function someoneisloggedin ()
{
    if [ $(who | wc -l) -gt 0 -o -n "$(pgrep ^screen$)" ]; then
        return 0
    else
        return 1
    fi
}

# only echos parameter if DEBUG is set to "YES"
function debug ()
{
    if [ $DEBUG = "YES" ]; then
        echo $@
    fi
}

# Warten, bis alle Benutzer ausgeloggt
debug -n "waiting for all sessions to end"
while someoneisloggedin && ! shifthasstarted ; do
    debug -n "."
    sleep 300
done
debug ""

# Wenn es ausserhalb der Arbeitszeit ist herunterfahren.
debug "It is now $(date "+%H:%M")"
debug "Shift starts at ${SHIFTSTART} and ends at ${SHIFTEND}"
debug -n "Therefore I am "
if shifthasstarted ; then
    debug "Cancelling shutdown because it's my shift"
else
    debug "Shutting down after an uptime of $(uptime | awk '{print $1}')"
    ${SHUTDOWN}
fi
exit 0