#!/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