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:
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:
Somit wird dann die nächste Ausführung geplant...
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 "$@"
Code:
exec /data/queuecommand 1234 Befehlname