Hi.
Ich bastele gerade ein script für Aufnahmen mit meinem DVB-T Stick, welches anhand der eingestellten Aufnahmen ('at' jobs) herausfindet, welches der nächste Job ist und diesen dann in die /sys/class/rtc/rtc0/wakealarm einstellt, wenn der Rechner runterfährt (/etc/init.d resp. /etc/rc0.d Skriptaufruf).
Das klappt soweit. Allerdings habe ich gerade festgestellt, dass der verwendete sort Befehl mit meinem User die Dateien falsch herum sortiert. Wenn der Rechner runterfährt und root das skript ausführt, dann stimmt die Reihenfolge der Sortierung. Hat mich graue Haare gekostet beim Testen.
Ich möchte es aber einheitlich haben, deswegen die Frage, warum mein User die Daten (Monate) verkehrtrum sortiert.
Hier das Skript:
#!/bin/sh # init # NEXTAT=0 TIMER=0 DATENOW=`date` # Datum aus at queue lesen atq | grep " a " | cut -b 8-27 > /tmp/atqdates echo $DATENOW >> /home/peter/.timerliste echo aktuelle Timerliste: >> /home/peter/.timerliste atq >> /home/peter/.timerliste echo aufbereitete Timerliste: >> /home/peter/.timerliste cat /tmp/atqdates >> /home/peter/.timerliste echo sortierte Timerliste: >> /home/peter/.timerliste ### -- zu debugzwecken doppelt drin / hier passiert der Unterschied. ### -- als angemeldeter User, muß ich hier "... -k 1Mr ..." reverse schreiben, damit es stimmt! sort -k 4n -k 1M -k 2n -k 3n /tmp/atqdates >> /home/peter/.timerliste ### # das früheste Datum holen NEXT=`sort -k 4n -k 1M -k 2n -k 3n /tmp/atqdates | grep : --max-count=1` echo gefunden für Timer: >> /home/peter/.timerliste echo $NEXT >> /home/peter/.timerliste # Datum in Sekundenformat wandeln if [ -n "$NEXT" ] then NEXTAT=`date +%s --date="$NEXT"` fi # neuen Timer 2 Minuten früher erstellen, wenn at queue Eintrag gefunden wurde, sonst löschen # /sys/class/rtc/rtc0/wakealarm mit "chmod 666" für alle schreibbar machen in /etc/rc.local if [ $NEXTAT -gt 0 ] then TIMER=$(($NEXTAT-120)) echo Neuer Timer: $TIMER >> /home/peter/.timerliste `echo $TIMER > /sys/class/rtc/rtc0/wakealarm` else # Kein Timer! Wakealarm löschen echo Kein Timer! >> /home/peter/.timerliste `echo 0 > /sys/class/rtc/rtc0/wakealarm` fi # aufräumen rm /tmp/atqdates exit 0
Der Output lieferte beim manuellen Aufruf (falsch) und anschliessendem 'shutdown -h now' (richtig) Folgendes:
Mi 28. Apr 10:55:33 CEST 2010 aktuelle Timerliste: 59 Tue May 4 21:10:00 2010 a peter 58 Mon May 3 21:05:00 2010 a peter 57 Wed Apr 28 21:10:00 2010 a peter aufbereitete Timerliste: May 4 21:10:00 2010 May 3 21:05:00 2010 Apr 28 21:10:00 2010 sortierte Timerliste: May 3 21:05:00 2010 May 4 21:10:00 2010 Apr 28 21:10:00 2010 <<< der müßte es sein! gefunden für Timer: May 3 21:05:00 2010 Neuer Timer: 1272913380 ------------------------------------ Wed Apr 28 10:55:39 CEST 2010 aktuelle Timerliste: 59 Tue May 4 21:10:00 2010 a peter 58 Mon May 3 21:05:00 2010 a peter 57 Wed Apr 28 21:10:00 2010 a peter aufbereitete Timerliste: May 4 21:10:00 2010 May 3 21:05:00 2010 Apr 28 21:10:00 2010 sortierte Timerliste: Apr 28 21:10:00 2010 <<< hier stimmt es! May 3 21:05:00 2010 May 4 21:10:00 2010 gefunden für Timer: Apr 28 21:10:00 2010 Neuer Timer: 1272481680
Als Alternative hatte ich mir schon überlegt die von atq ausgegebenen Zeilen gleich in das Sekundenformat zu bringen, da würde ich etwas sparen, nur wie bekomme ich alle Zeilen der /tmp/atqdates Zeilenweise durch den Befehl 'date --date="...hier atq Zeile..." +%s gejagt und in eine Datei rausgeschrieben? 'sed' kann das nicht, oder?
Danke für Tipps!!! Gruß Peter