BASH: Sleep, alle 2,5 Minuten - wie noch genauer? - expr , ?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
tjhooker
Beiträge: 41
Registriert: 29.05.2007 09:28:45

BASH: Sleep, alle 2,5 Minuten - wie noch genauer? - expr , ?

Beitrag von tjhooker » 10.06.2007 10:01:08

Hi.

Ich habe ein Script am laufen, welches Exakt alle 2,5 Minuten starten soll.

Hier ist das Codeschnippsel, welches möglich auf die Sekunde arbeitet.

Code: Alles auswählen

    wait=`expr \( $(date +%s) / 150 + 1 \) \* 150 - $(date +%s) - 15`
    sleep $wait
    wait=`expr \( $(date +%s) / 150 + 1 \) \* 150 - $(date +%s)`
    sleep $wait
Doch trotzdem versagt es leider und das Script wird bspw: 02:00:01 in gang gesetzt.
(Fragt mich aber bitte nicht warum es so genau sein muss)

Ich würde gerne mit Programme expr hierfür auch die Kommastellen berechnen, doch leider kürzt es diese immer wieder weg.
Deshalb funktioniert auch diese komische Gleichung, die eigentlich wieder auf selben Wert kommen müsste.


Kennt hier jm. was man noch unter der Bash tun könnte um die eine Sekunde auszumertzen?

Gruß
Zuletzt geändert von tjhooker am 10.06.2007 10:57:02, insgesamt 1-mal geändert.

Benutzeravatar
Savar
Beiträge: 7174
Registriert: 30.07.2004 09:28:58
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

Beitrag von Savar » 10.06.2007 10:07:57

ganz ehrlich? Ich plan nicht was du nun eigentlich wissen willst :)

hilft dir sowas:

(der Befehl "calc" kommt vom Paket: apcalc)

Code: Alles auswählen

calc "( "$(date +%s)" / 150 + 1 ) * 150 - "$(date +%s)" - 15"
MODVOICE/MYVOICE
Debianforum Verhaltensregeln
Log Dateien? -> NoPaste

Benutzeravatar
GoKi
Beiträge: 2068
Registriert: 04.07.2003 23:08:56
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von GoKi » 10.06.2007 10:54:50

Code: Alles auswählen

sleep 150
?
Ich verstehe den Sinn deiner Berechnung nicht... Würde für mich eher Sinn machen, wenn du mit date schaust, wieviel Zeit verbraucht wurde (durch Ausführen von Befehlen) und dann die Pause berechnen. Aber so?

Code: Alles auswählen

#!/bin/bash
wait=$(bc << EOF
scale = 9
($(date +%s) / 150 + 1) * 150 - $(date +%s)
EOF
)
echo $wait
Möglichst kompliziert 150 ausrechnen? :D
MfG GoKi
:wq

tjhooker
Beiträge: 41
Registriert: 29.05.2007 09:28:45

Beitrag von tjhooker » 10.06.2007 11:08:19

GoKi hat geschrieben:

Code: Alles auswählen

sleep 150
?
Ich verstehe den Sinn deiner Berechnung nicht... Würde für mich eher Sinn machen, wenn du mit date schaust, wieviel Zeit verbraucht wurde (durch Ausführen von Befehlen) und dann die Pause berechnen. Aber so?

Code: Alles auswählen

#!/bin/bash
wait=$(bc << EOF
scale = 9
($(date +%s) / 150 + 1) * 150 - $(date +%s)
EOF
)
echo $wait
Möglichst kompliziert 150 ausrechnen? :D
Am ende wird es
02:00:00
dann
02:02.30
dann
02:05:00
usw.....
sein

Das Script wird einmalig durch Crontab beim Systemstart gestartet und muss sich dann selber kümmern.


Dein BC-Ansatz gefällt mir, kannte ich noch nicht. Ich werde mal weiter Ausbauen.

Alternative ist mir das eben noch eingefallen:

Code: Alles auswählen

    wait=`expr \( $(date +%s) / 150 + 1 \) \* 150 - $(date +%s) - 1`
    sleep $wait
    sleep 0.`expr 1000000000 - $(date +%N)`
Besten dank.
Gruß

zu Savar:

Das Ergebnis von calc rechnet völlig an meinen Sinn vorbei.
Meine letzten Zeilen hatte ich während eines Telefonates geschrieben, ich wunderte mich selbst gerade, korrigiert ;-)

Vielleicht werde ich mir calc auch noch mal genauer anschauen, es scheint aber auf jedenfall komplizierte/unübersichtlicher als bc´.

Auch dir Gruß und Dank

Benutzeravatar
Savar
Beiträge: 7174
Registriert: 30.07.2004 09:28:58
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

Beitrag von Savar » 10.06.2007 11:16:12

calc ist einfach nur nen Taschenrechner :) nich mehr und nich weniger ;-)
MODVOICE/MYVOICE
Debianforum Verhaltensregeln
Log Dateien? -> NoPaste

Antworten