Diskussion:Acpiwakeupscript

Aus VDR Wiki
(Unterschied zwischen Versionen)
Wechseln zu: Navigation, Suche
 
Zeile 2: Zeile 2:
  
 
Ich bin leider ein Laie aber vielleicht hilft es ja trotzdem. Interessant dürfte das lesen der Timer sein und das erstellen des "Default-Timers". Hier mal das ganze Skript:
 
Ich bin leider ein Laie aber vielleicht hilft es ja trotzdem. Interessant dürfte das lesen der Timer sein und das erstellen des "Default-Timers". Hier mal das ganze Skript:
#!/bin/bash
+
#!/bin/bash
#
+
#
# ShutDown.sh
+
# ShutDown.sh
# - Prüft, ob gerade eine Aufnahme läuft
+
# - Prüft, ob gerade eine Aufnahme läuft
# - Kein shutdown am Tag (Serverbetrieb)
+
# - Kein shutdown am Tag (Serverbetrieb)
# - Täglicher start (Serverbetrieb)
+
# - Täglicher start (Serverbetrieb)
#
+
#
set -x
+
set -x
  
# Gen2VDR V2
+
# Gen2VDR V2
source /etc/vdr.d/conf/vdr
+
source /etc/vdr.d/conf/vdr
source /etc/vdr.d/conf/gen2vdr.cfg
+
source /etc/vdr.d/conf/gen2vdr.cfg
  
LOG=/log/shutdown.log
+
LOG=/log/shutdown.log
SVDRPCMD=/usr/bin/svdrpsend.pl
+
SVDRPCMD=/usr/bin/svdrpsend.pl
WAKEUP_FILE="/_config/status/Wakeup"
+
WAKEUP_FILE="/_config/status/Wakeup"
WAKEUP_FLAG="/_config/status/~Wakeup_Flag"
+
WAKEUP_FLAG="/_config/status/~Wakeup_Flag"
CMD_LST="mplayer noad"
+
CMD_LST="mplayer noad"
Wakeup=08:35 # Normale Einschaltzeit (HH:MM)
+
Wakeup=08:35 # Normale Einschaltzeit (HH:MM)
SOn=7 # Serverbetrieb Startzeit (H) im 24h-Format
+
SOn=7 # Serverbetrieb Startzeit (H) im 24h-Format
SOff=0 # Serverbetrieb Endzeit (H) im 24h-Format
+
SOff=0 # Serverbetrieb Endzeit (H) im 24h-Format
SEND=/usr/sbin/send # Pfad zum 'Send' (Message Plugin)
+
SEND=/usr/sbin/send # Pfad zum 'Send' (Message Plugin)
DATE=/bin/date # Pfad zum 'Date'
+
DATE=/bin/date # Pfad zum 'Date'
POWERDOWNFLAG=/etc/killpower # Stromausfall!
+
POWERDOWNFLAG=/etc/killpower # Stromausfall!
SHUTDOWN_FILE=/_config/status/~waitforshutdown  # at nur einmal starten
+
SHUTDOWN_FILE=/_config/status/~waitforshutdown  # at nur einmal starten  
  
logger -s "$0 $*"
+
logger -s "$0 $*"
  
#Parameter in Variable speichern
+
#Parameter in Variable speichern
PAR0=$0
+
PAR0=$0
PAR_=$*
+
PAR_=$*
PAR1=$1
+
PAR1=$1
PAR4=$4
+
PAR4=$4
  
sAktDat="`date -d \"now\" +\"%s\"`" # aktuelles Datum in sekunden
+
sAktDat="`date -d \"now\" +\"%s\"`" # aktuelles Datum in sekunden
WakeupDat="`date -d \"now\" +\"%Y-%m-%d $Wakeup\"`" # Wakeup-Datum (8:30h)
+
WakeupDat="`date -d \"now\" +\"%Y-%m-%d $Wakeup\"`" # Wakeup-Datum (8:30h)
sWakeupDat="`date -d \"$WakeupDat\" +\"%s\"`" # Wakeup-Datum in sekunden
+
sWakeupDat="`date -d \"$WakeupDat\" +\"%s\"`" # Wakeup-Datum in sekunden
  
# WAKEUP_FLAG löschen
+
# WAKEUP_FLAG löschen
[ -f $WAKEUP_FLAG ] && rm -f $WAKEUP_FLAG
+
[ -f $WAKEUP_FLAG ] && rm -f $WAKEUP_FLAG
  
function check_ontime () { #Kein ShutDown in der vorgegebenen "Server-Zeit"
+
function check_ontime () { #Kein ShutDown in der vorgegebenen "Server-Zeit"
 
if [[ `date +%k` -gt $SOn && `date +%k` -ne $SOff ]]; then
 
if [[ `date +%k` -gt $SOn && `date +%k` -ne $SOff ]]; then
 
ERR_MSG="Kein Shutdown zwischen $SOn und $SOff Uhr"
 
ERR_MSG="Kein Shutdown zwischen $SOn und $SOff Uhr"
Zeile 54: Zeile 54:
 
fi
 
fi
 
   return
 
   return
}
+
}
  
function set_next_shutdown () {
+
function set_next_shutdown () {
 
   if [ -f $SHUTDOWN_FILE ]; then
 
   if [ -f $SHUTDOWN_FILE ]; then
 
logger -s "[$0] Shutdown already set!"
 
logger -s "[$0] Shutdown already set!"
Zeile 63: Zeile 63:
 
   echo "$PAR0 $PAR_ > $LOG 2>&1" | at now +$1 minutes
 
   echo "$PAR0 $PAR_ > $LOG 2>&1" | at now +$1 minutes
 
   touch $SHUTDOWN_FILE
 
   touch $SHUTDOWN_FILE
}
+
}
  
# [Shutdown per CRON] Prüft, ob gerade eine Aufnahme läuft
+
# [Shutdown per CRON] Prüft, ob gerade eine Aufnahme läuft
if [ "$1" = "cron" ] ; then # Aufruf über cron  
+
if [ "$1" = "cron" ] ; then # Aufruf über cron  
 
#Kein ShutDown in der vorgegebenen "Server-Zeit"
 
#Kein ShutDown in der vorgegebenen "Server-Zeit"
 
check_ontime
 
check_ontime
Zeile 78: Zeile 78:
 
   logger -s "[$0] keine Aufnahme; Shutdown"
 
   logger -s "[$0] keine Aufnahme; Shutdown"
 
fi
 
fi
fi
+
fi
  
if [ "$1" != "force" ] ; then
+
if [ "$1" != "force" ] ; then
 
for x in ${CMD_LST} ; do
 
for x in ${CMD_LST} ; do
 
if pidof $x >/dev/null ; then
 
if pidof $x >/dev/null ; then
Zeile 89: Zeile 89:
 
   fi
 
   fi
 
done
 
done
fi
+
fi
  
# Eingefügt um Shutdown am Tag zu verhindern (kann mit 'force' umgangen werden)
+
# Eingefügt um Shutdown am Tag zu verhindern (kann mit 'force' umgangen werden)
if [ "$1" = "force" ] || [ "$1" = "cron" ] ; then # Aufruf über Skript
+
if [ "$1" = "force" ] || [ "$1" = "cron" ] ; then # Aufruf über Skript
 
logger -s "Shutdown ($1)!"
 
logger -s "Shutdown ($1)!"
 
PAR1=0
 
PAR1=0
Zeile 112: Zeile 112:
 
esac
 
esac
  
# Timer einlesen und Auswerten
+
# Timer einlesen und Auswerten  
while IFS=: read id station date start stop pri life desc epgsearch
+
while IFS=: read id station date start stop pri life desc epgsearch
do
+
do
 
#today="`$DATE -d now +\"%G-%m-%d\"`" # YYYY-MM-DD
 
#today="`$DATE -d now +\"%G-%m-%d\"`" # YYYY-MM-DD
 
   #if [ "$today" == "$date" ] && [ "$start" -gt "$ManWakeUp" ]; then
 
   #if [ "$today" == "$date" ] && [ "$start" -gt "$ManWakeUp" ]; then
Zeile 125: Zeile 125:
 
  #let wtimer="`$DATE -d \"$date $starttime\" +\"%s\"` - $WAKEUP_RESERVE"  
 
  #let wtimer="`$DATE -d \"$date $starttime\" +\"%s\"` - $WAKEUP_RESERVE"  
 
  wtimer="`$DATE -d \"$date $starttime\" +\"%s\"`"  
 
  wtimer="`$DATE -d \"$date $starttime\" +\"%s\"`"  
  #echo "Neuer Timer: `$DATE -d \"1970-01-01 UTC $wtimer seconds\" +\"%Y-%m-%d %R\"` ($wtimer)"
+
  #echo "Neuer Timer: `$DATE -d \"1970-01-01 UTC $wtimer seconds\" +\"%Y-%m-%d %R\"` ($wtimer)"
 
   #fi
 
   #fi
 
 
Zeile 140: Zeile 140:
 
done </etc/vdr/timers.conf  # Da werden die Timer gespeichert
 
done </etc/vdr/timers.conf  # Da werden die Timer gespeichert
 
 
else
+
else
 
#Kein ShutDown in der vorgegebenen "Server-Zeit"
 
#Kein ShutDown in der vorgegebenen "Server-Zeit"
 
check_ontime
 
check_ontime
fi
+
fi
  
# Heutiger Startzeitpunkt schon vorbei?
+
# Heutiger Startzeitpunkt schon vorbei?
if [ $sAktDat -gt $sWakeupDat ] ; then
+
if [ $sAktDat -gt $sWakeupDat ] ; then
 
let sWakeupDat="$sWakeupDat +86400" # +24h
 
let sWakeupDat="$sWakeupDat +86400" # +24h
 
WakeupDat="`$DATE -d \"1970-01-01 UTC $sWakeupDat seconds\" +\"%Y-%m-%d %R\"`"
 
WakeupDat="`$DATE -d \"1970-01-01 UTC $sWakeupDat seconds\" +\"%Y-%m-%d %R\"`"
fi
+
fi
  
# Testen ob der nächste Timer vor dem nächsten Wakeup liegt und falls nötig den Wakeup anassen.
+
# Testen ob der nächste Timer vor dem nächsten Wakeup liegt und falls nötig den Wakeup anassen.
if [ $PAR1 -gt $sWakeupDat ] || [ "$PAR1" = "0" ] ; then
+
if [ $PAR1 -gt $sWakeupDat ] || [ "$PAR1" = "0" ] ; then
 
# Normaler Wakeup
 
# Normaler Wakeup
 
PAR1=$sWakeupDat
 
PAR1=$sWakeupDat
 
PAR4=""
 
PAR4=""
else
+
else
 
# PAR1 wird neuer Starttermin. Vorher in das rechte Format wandeln
 
# PAR1 wird neuer Starttermin. Vorher in das rechte Format wandeln
 
NEXT_ALARM="`$DATE -d \"1970-01-01 UTC $PAR1 seconds\" +\"%Y-%m-%d %R\"`"
 
NEXT_ALARM="`$DATE -d \"1970-01-01 UTC $PAR1 seconds\" +\"%Y-%m-%d %R\"`"
fi
+
fi
  
#Zeit bis zum nächsten Timer
+
#Zeit bis zum nächsten Timer
let PAR2="$PAR1 - $sAktDat"
+
let PAR2="$PAR1 - $sAktDat"
  
[ -f $SHUTDOWN_FILE ] && rm -f $SHUTDOWN_FILE
+
[ -f $SHUTDOWN_FILE ] && rm -f $SHUTDOWN_FILE
  
# Original Shutdown-Skript aufrufen
+
# Original Shutdown-Skript aufrufen
## Beispiel: /_config/bin/vdrshutdown 1165026000 9816 34 nano~Die Welt von morgen 1
+
## Beispiel: /_config/bin/vdrshutdown 1165026000 9816 34 nano~Die Welt von morgen 1
#logger -s "$1 = $PAR1"
+
#logger -s "$1 = $PAR1"
if [ "$PAR4" = "" ] ; then # Nicht vom VDR gestartet
+
if [ "$PAR4" = "" ] ; then # Nicht vom VDR gestartet
 
PAR4="Automatischer-Wakeup"
 
PAR4="Automatischer-Wakeup"
 
/_config/bin/vdrshutdown.sh $PAR1 $PAR2 00 "$PAR4" 1 > /var/log/vdrshutdown.log 2>&1
 
/_config/bin/vdrshutdown.sh $PAR1 $PAR2 00 "$PAR4" 1 > /var/log/vdrshutdown.log 2>&1
Zeile 179: Zeile 179:
 
# SHUTDOWN_FILE löschen damit VDR bein nächsten Start an bleibt
 
# SHUTDOWN_FILE löschen damit VDR bein nächsten Start an bleibt
 
[ -f $WAKEUP_FILE ] && rm -f $WAKEUP_FILE
 
[ -f $WAKEUP_FILE ] && rm -f $WAKEUP_FILE
else
+
else
 
/_config/bin/vdrshutdown.sh $PAR1 $PAR2 $3 "$PAR4" $5 > /var/log/vdrshutdown.log 2>&1
 
/_config/bin/vdrshutdown.sh $PAR1 $PAR2 $3 "$PAR4" $5 > /var/log/vdrshutdown.log 2>&1
 
RC=$?
 
RC=$?
fi
+
fi
  
# Rückgabecode
+
# Rückgabecode
if [ "$RC" = "1" ] ; then
+
if [ "$RC" = "1" ] ; then
 
   set_next_shutdown 10
 
   set_next_shutdown 10
 
exit 1
 
exit 1
else
+
else
 
logger -s "RetunCode: $RC"
 
logger -s "RetunCode: $RC"
 
exit 0
 
exit 0
fi
+
fi

Version vom 19. Oktober 2008, 10:43 Uhr

ich habe ein ähnliches Skript. Es macht einen täglichen festen Wakeup, außer es liegt ein Timer davor. Ich rechne intern mit den Datum in Sekunden seit 1970, das kann amn dann auch schön in das passende Format konvertieren.

Ich bin leider ein Laie aber vielleicht hilft es ja trotzdem. Interessant dürfte das lesen der Timer sein und das erstellen des "Default-Timers". Hier mal das ganze Skript:

#!/bin/bash
#
# ShutDown.sh
#	- Prüft, ob gerade eine Aufnahme läuft
#	- Kein shutdown am Tag (Serverbetrieb)
# - Täglicher start (Serverbetrieb)
#
set -x
# Gen2VDR V2
source /etc/vdr.d/conf/vdr
source /etc/vdr.d/conf/gen2vdr.cfg
LOG=/log/shutdown.log
SVDRPCMD=/usr/bin/svdrpsend.pl
WAKEUP_FILE="/_config/status/Wakeup"
WAKEUP_FLAG="/_config/status/~Wakeup_Flag"
CMD_LST="mplayer noad"
Wakeup=08:35				# Normale Einschaltzeit (HH:MM)
SOn=7					# Serverbetrieb Startzeit (H) im  24h-Format
SOff=0							# Serverbetrieb Endzeit (H) im 24h-Format
SEND=/usr/sbin/send	# Pfad zum 'Send' (Message Plugin)
DATE=/bin/date			# Pfad zum 'Date'
POWERDOWNFLAG=/etc/killpower # Stromausfall!
SHUTDOWN_FILE=/_config/status/~waitforshutdown  # at nur einmal starten 
logger -s "$0 $*"
#Parameter in Variable speichern
PAR0=$0
PAR_=$*
PAR1=$1
PAR4=$4
sAktDat="`date -d \"now\" +\"%s\"`" 				# aktuelles Datum in sekunden
WakeupDat="`date -d \"now\" +\"%Y-%m-%d $Wakeup\"`"		# Wakeup-Datum (8:30h)
sWakeupDat="`date -d \"$WakeupDat\" +\"%s\"`"			# Wakeup-Datum in sekunden
# WAKEUP_FLAG löschen
[ -f $WAKEUP_FLAG ] && rm -f $WAKEUP_FLAG
function check_ontime () { #Kein ShutDown in der vorgegebenen "Server-Zeit"

if `date +%k` -gt $SOn && `date +%k` -ne $SOff ; then ERR_MSG="Kein Shutdown zwischen $SOn und $SOff Uhr" logger -s "[$0] $ERR_MSG" $SVDRPCMD MESG $ERR_MSG # VDR 'drückt' alle paar Minuten den Power-Knopf. Taste drücken um ihn davon abzuhalten sleep 6 $SVDRPCMD HITK Back exit 2 fi

 return
}
function set_next_shutdown () {
 if [ -f $SHUTDOWN_FILE ]; then

logger -s "[$0] Shutdown already set!" #return 1 fi

 echo "$PAR0 $PAR_ > $LOG 2>&1" | at now +$1 minutes
 touch $SHUTDOWN_FILE
}
# [Shutdown per CRON] Prüft, ob gerade eine Aufnahme läuft
if [ "$1" = "cron" ] ; then	# Aufruf über cron 

#Kein ShutDown in der vorgegebenen "Server-Zeit" check_ontime #Läuft ein Timer? RESULT=$($SVDRPCMD -p ${VDR_PORT:-2001} NEXT REL | awk '/^250/ { print $3 }') if [[ $RESULT < 1 ]]; then

	  logger -s "[$0] Aufnahme läuft! Shutdown um 20 Minuten verschoben"
   set_next_shutdown 20
 	exit 1

else

 	logger -s "[$0] keine Aufnahme; Shutdown"

fi

fi
if [ "$1" != "force" ] ; then

for x in ${CMD_LST} ; do if pidof $x >/dev/null ; then

 		$SVDRPCMD MESG "$x läuft! Shutdown in 15 Minuten!"
 		logger -s "[$0] $x läuft! Shutdown in 15 Minuten!"
 		set_next_shutdown 15
 		exit 1
 	fi

done

fi
# Eingefügt um Shutdown am Tag zu verhindern (kann mit 'force' umgangen werden)
if [ "$1" = "force" ] || [ "$1" = "cron" ] ; then	# Aufruf über Skript

logger -s "Shutdown ($1)!" PAR1=0

# Abfrage ob runtergefahren werden soll (Message-Plugin nötig) $SEND ask -s -t 5 "Ausschalten abbrechen?" RC=$?

case $RC in

 	0) echo -n "Failed (Timeout)";;
 	1) echo -n "Success";;
 	2) echo -n "Confirmed (OK)"
 		 $SVDRPCMD MESG "Shutdown abgebrochen!"
 		 exit 1 ;;
 	3) echo -n "Aborted (Exit)"
 		 $SVDRPCMD MESG "Shutdown abgebrochen!"
 		 exit 1 ;;
 	*) echo -n "unbekannt ($RC)";;

esac

	# Timer einlesen und Auswerten 
	while IFS=: read id station date start stop pri life desc epgsearch
	do

#today="`$DATE -d now +\"%G-%m-%d\"`" # YYYY-MM-DD

 	#if [ "$today" == "$date" ] && [ "$start" -gt "$ManWakeUp" ]; then
		starttime=${start:0:2}:${start:2:2}			# ${string:position:length}
 	#echo "Timer gefunden: $date $starttime (`$DATE -d \"$date $starttime\" +\"%s\"`)"
		#echo "`$DATE -d \"$date $starttime\" +\"%Y-%m-%d %R\"`"
		#echo "Sicherheitspuffer=" $Puffer "Sekunden" 
		#echo "`$DATE -d \"$date $starttime seconds\" +\"%Y-%m-%d %R\"`"
		# Sicherheitspuffer abziehen
		#let wtimer="`$DATE -d \"$date $starttime\" +\"%s\"` - $WAKEUP_RESERVE" 
		wtimer="`$DATE -d \"$date $starttime\" +\"%s\"`" 
		#echo "Neuer Timer: `$DATE -d \"1970-01-01 UTC $wtimer seconds\" +\"%Y-%m-%d %R\"`  ($wtimer)"
 	#fi

# Ist der letzte Timer der nächste? if [ -z $ntimer ] || [ $ntimer -gt $wtimer ] ; then if [ "$id" = "1" ] && [ $wtimer -gt $sAktDat ] ; then # Nur aktive Timer die nicht schon laufen ntimer=$wtimer PAR1=$ntimer PAR4=$desc #echo "---- Nächster NTimer! ----" logger -s "[$0] Nächster Timer: PAR1: $PAR1 PAR4: $PAR4" fi fi done </etc/vdr/timers.conf # Da werden die Timer gespeichert

else

#Kein ShutDown in der vorgegebenen "Server-Zeit" check_ontime

fi
# Heutiger Startzeitpunkt schon vorbei?
if [ $sAktDat -gt $sWakeupDat ] ; then

let sWakeupDat="$sWakeupDat +86400" # +24h WakeupDat="`$DATE -d \"1970-01-01 UTC $sWakeupDat seconds\" +\"%Y-%m-%d %R\"`"

fi
# Testen ob der nächste Timer vor dem nächsten Wakeup liegt und falls nötig den Wakeup anassen.
if [ $PAR1 -gt $sWakeupDat ] || [ "$PAR1" = "0" ] ; then

# Normaler Wakeup PAR1=$sWakeupDat PAR4=""

else

# PAR1 wird neuer Starttermin. Vorher in das rechte Format wandeln NEXT_ALARM="`$DATE -d \"1970-01-01 UTC $PAR1 seconds\" +\"%Y-%m-%d %R\"`"

fi
#Zeit bis zum nächsten Timer
let PAR2="$PAR1 - $sAktDat"
[ -f $SHUTDOWN_FILE ] && rm -f $SHUTDOWN_FILE
# Original Shutdown-Skript aufrufen
## Beispiel: /_config/bin/vdrshutdown 1165026000 9816 34 nano~Die Welt von morgen 1
#logger -s "$1 = $PAR1"
if [ "$PAR4" = "" ] ; then # Nicht vom VDR gestartet

PAR4="Automatischer-Wakeup" /_config/bin/vdrshutdown.sh $PAR1 $PAR2 00 "$PAR4" 1 > /var/log/vdrshutdown.log 2>&1 RC=$? # WAKEUP_FLAG entscheidet, ob WAKEUP_FILE gelöscht wird (myexit.sh) #touch $WAKEUP_FLAG # Debug #SDTMP=$(ls --full-time $WAKEUP_FILE | cut -f 6,7 -d " ") # SHUTDOWN_FILE löschen damit VDR bein nächsten Start an bleibt [ -f $WAKEUP_FILE ] && rm -f $WAKEUP_FILE

else

/_config/bin/vdrshutdown.sh $PAR1 $PAR2 $3 "$PAR4" $5 > /var/log/vdrshutdown.log 2>&1 RC=$?

fi
# Rückgabecode
if [ "$RC" = "1" ] ; then
 set_next_shutdown 10

exit 1

else

logger -s "RetunCode: $RC" exit 0

fi