blob: 643912674519846aa4c42632c81d7c3773e94853 (
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
|
#!/bin/sh
# 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='10'
# 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"
# shift is considered started when the machine should run
# 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 somebody is logged in
function somebodyisloggedin ()
{
r1=$(w -h | wc -l) # local users
r2=$(ps ax | grep -e tmux -e SCREEN -e 'sshd:' | grep -v grep | wc -l) # remote users
return $(( ! (r1 + r2) ))
}
# 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 somebodyisloggedin && ! 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
|