Anleitung: Starten eines Befehls zu einer bestimmten Uhrzeit

Pum

Neuer User
Mitglied seit
25 Mai 2007
Beiträge
13
Punkte für Reaktionen
0
Punkte
0
Mal keine Frage sondern eine Info, die vielleicht dem einen oder anderen nützt.

Ich stand vor dem Problem, auf einer unmodifizierten Fritzbox 7270 immer zu einer bestimmten Uhrzeit einen Befehl ausführen zu wollen. Es gibt schon ein paar Artikel hier im Forum zu dem Thema, aber ich habe noch nichts ganz rundes gefunden.

Hier meine Lösung:
Code:
#!/bin/sh

usage () {
	echo "Aufruf: queuecommand [-u] <HHMM> <Befehl> [Parameter...]\n" >&2
	echo "-u:                Die angegebene Uhrzeit ist in UTC" >&2
	echo "HHMM:              Uhrzeit, zu der der Befehl gestartet werden soll" >&2
	echo "Befehl, Parameter: Aufzurufender Befehl" >&2
	exit 1
}

TIMEISUTC=""		# leer: lokale Zeit, "-u": UTC

if [ "$1" = "-u" ] ; then
	TIMEISUTC="-u"
	shift
fi

TIME=$1
shift

if [ "$1" = "" ] ; then
	usage
fi

# Keine Ahnung, ob das notwendig ist
trap '' SIGHUP

# Aktuelle Zeit in Sekunden nach 1.1.1970
CURSECS=$(date +%s)

# Zeit in Skunden nach 1.1.1970, heute um TIME
SECS=$(date $TIMEISUTC -d $(date +%m%d$TIME) +%s)

if [ "$SECS" = "" ] ; then
	usage
fi

# Wenn SECS < CURSECS, dann ist diese Uhrzeit heute schon vorbei
SLEEPSECS=$(( $SECS - $CURSECS ))
if [ $SLEEPSECS -le 0 ] ; then
	SLEEPSECS=$(( $SLEEPSECS + 60 * 60 * 24 ))
fi

sleep $SLEEPSECS
exec "$@"
Der Befehl wird nur einmalig ausgeführt. Wenn das auszuführende Programm/Skript jeden Tag ausgeführt werden soll, dann sollte es als letzten Befehl etwa so eine Zeile enthalten:
Code:
exec /data/queuecommand 1234 Befehlname
Somit wird dann die nächste Ausführung geplant...
 
Kostenlos!

Statistik des Forums

Themen
248,907
Beiträge
2,303,654
Mitglieder
378,541
Neuestes Mitglied
telefonieverzweiflung