"at" Kommando fehlt, kann das sein?

universam

Neuer User
Mitglied seit
6 Jul 2008
Beiträge
8
Punkte für Reaktionen
0
Punkte
0
Hallo,

sorry wenn ich der Super-DAU bin, aber ich such mir einen Wolf nach dem "at" Kommando, um etwas zu einer bestimmten Uhrzeit aus zu führen. Damit meine ich nicht den Cron, der in regelmässigen Abständen läuft.

Kann es sein das so etwas rudimentäres nicht existiert?

Danke für auf die Sprünge helfen!

Sam
 
Danke für die Info.

Rein interessehalber - hätte erwartet dass atd eines der leichtesten Übungen wäre zu übersetzen. Wo liegt die Herausforderung? Gibt es denn sonst keinen der sowas braucht?
 
Die Box hat sehr begrenzte Ressourcen. Also ist nicht die Frage, was sich leicht übersetzen ließe, sondern was (zwingend) benötigt wird. Je einfacher etwas zu ersetzen ist (und je weniger ein spezielles Programm benötigen) desto geringer die Chance, dass sich jemand dran setzt, ein Paket dafür zu bauen.

Und es gibt (offensichtlich) nicht zu viele, denen das bislang gefehlt hat, vermutlich weil cron da ist und für "einmalige" Dinge ein "sleep" fast immer reicht und ein eigenes Programm dafür sich so erübrigt ;-)
 
Meine Befürchtung ist nur, dass ich es nicht schaffe einen effektiveren Task Scheduler zu coden als das wohl ziemlich gut getestete und optimierte atd schon ist. Klingt irgendwie nach dem neu erfundenen Rad...

Konkret soll mir die Fritzbox als remote Wako On Lan Service dienen - so ne art Wecker - d.h. meine XBMC Maschine schickt beim shutdown eine Zeitangabe an die Fritzbox wann sie denn wieder geweckt werden möchte. Weil das mir der original Version nicht geht bin ich natürlich auf die Freetz gestürmt in der absoluten Überzeugung dass das damit geht...
Da bringt mir natürlich der cron nicht viel, weil ich ja eine Aktion zum gewissen Termin möchte.
Vielleicht gibts ja bessere Ideen... :)
 
Wohl das einfachste, wenn die XBMC Kiste direkt sagt, wie lange es bis zum gewünschten Wecken ist, dann reicht auf der FritzBox ein "sleep $1; <wecke XBMC>".
 
In der Tat, die Lösung hat Charme!
Jetzt müsste ich nur noch was haben was mich über den Reboot rettet...
 
Als Idee: "speichere" das in der rc.custom (sofern du die nicht schon für was anderes benötigst) mit diesem Skript (als Aufrufparameter die "gewünschte Startzeit" als Sekunden ab 1970):
Code:
#!/bin/sh
RC=/var/tmp/flash/mod/rc.custom

cat << 'EOF' > $RC
# wait up to 5 times 5 seconds to get "actual" date
c=0; while [ $(date +%Y) -lt 2013 -a $c -lt 5 ]; do sleep 5; let c++; done
# still no luck? bail out
[ $(date +%Y) -lt 2013 ] && exit -1
EOF
echo '(sleep $(( '"$1"' - $(date +%s) ) && <wecke Box>) &' >> $RC

modsave flash

# so, fertig mit "sichern", jetzt sleep starten
(sleep $(( $1 - $(date +%s) )) && <wecke Box> )&
 
Das ist richtig gut, herzlichen Dank!
Ich sag bescheid!
 
Moin
Schade, dass du crond und seine crontabs ablehnst.
Denn der ist ja wie geschaffen dafür, auch das crontab läßt sich während der Laufzeit beeinflussen.
In freetz haste auch noch eine Konfigseite dafür.
Damit lassen sich alle Un/möglichen Sachen mit anstellen.
Aber back to at: Kann man den nicht in der busybox Konfiguration (make menuconfig) mit einbauen?
(Bin grad auf Arbeit und kann grad nicht reinschauen)
 
Gibbet nicht (in der Busybox). Aber ich habe da mal was "quick&dirty" gemacht (nur das Binary, Vorlage vom openwrt) (im Freetz Verzeichnis auspacken).

Um es "fest" ins Image zu bekommen, müsstest du das in das "Config.in" integrieren, dann ist es im menuconfig auswählbar.
Code:
sed -i '/apache2/asource make/at/Config.in' make/Config.in
Sind aber zum einen nur die Binaries und zum andern fehlt die "resetfestigkeit" von Einträgen...
 

Anhänge

Also ich habe es jetzt folgendermaßen quick-'n-dirty gemacht.

Auf der XBMC als /usr/bin/setwakeup.sh
Code:
#!/bin/sh

echo $1 | nc 192.168.1.100 1234
exit 0

und auf der Freetz ruft die rc.custom folgendes script
Code:
#!/bin/sh

port="1234"
mac="xx:xx:xx"
log=/tmp/wake.log

while [ true ]
do
        wt=$(nc -l -p $port)
        echo "got schedule for $(date -d @$wt)" >> $log
        (sleep $(( $wt - $(date +%s) )) && ether-wake $mac && echo "$(date) waking now $mac" >> $log ) &
done

Obwohl mir das "at" nach wie vor interessanter ist, da ich ja leichter mehrere schedules ausführen kann.
Danke für die super Unterstützung! :D

Gruss Sam
 
Hast du das "at" Binary mal getestet?
 
... Mist, ich hatte nur in "deinem" Branch danach gesucht, da hätt ich mir die Arbeit sparen können ;-)
 
Stimmt, und sogar in Version 3.1.13 statt ;-) "deiner asbach uralten Version" ;-)
 
Moin
Au, ja, lasst uns raten!

while [ true ] <---<< mach es solange keine Fehler auftreten (Returncode)

while [ false ] <---<< mach es solange Fehler auftreten (Returncode)

...richtig?
 
Au, ja, lasst uns raten!

Mit dem Raten ist das so eine Sache. Beim nächsten Raten solltest Du berücksichtigen, dass ich die Fragen nicht gestellt hätte, wenn die Antwort so einfach wäre.

Da sich sonst niemand beteiligt hat, hier die Auflösung:
"while [ true ]" und "while [ false ]" manchen beide genau das Gleiche, nämlich eine Endlosschleife (solange die Schleife nicht anderweitig beendet wird). Man kann ebenso "while [ vielleicht ]" oder "while [ WasAuchImmer ]" schreiben. Das einzige, was damit getestet wird, ist, dass der String zwischen den Klammern nicht leer ist.

Korrekt ist "while true". Das Gegenstück wäre "while false", wobei es dafür kaum eine Anwendung geben dürfte, außer um eine Schleife auszukommentieren. Aber wenn man etwas in der Art schreibt, wundert man sich nachher, dass immer der true Zweig genommen wird:
Code:
# Konfig
VAR=false

# Programm
if [ $VAR ]; then
  echo true
else
  echo false
fi
 
Kostenlos!

Statistik des Forums

Themen
248,920
Beiträge
2,305,109
Mitglieder
378,645
Neuestes Mitglied
nikitarajusa