Marcus Franke <Marcus.Franke(at)viebranz.de> wrote:
> Da ich nun kein Held im Shell-Scripting bin, wie
> kann ich eine Schleife realisieren, die alle 10
> Sekunden meinen Befehl ausführt?
>
> #!/bin/sh
> while true
> sleep 10
> befehl
> end
#!/bin/sh -
while :; do
sleep 10
befehl
end
Genaugenommen führt das das Befehl natürlich nicht alle
zehn Sekunden aus, sondern mit jeweils zehn Sekunden Pause
dazwischen. Je nachdem, wie lange der Befehl zur Ausfüh-
rung braucht, kann das mehr oder weniger abweichen. Wenn
es etwas exakter sein soll:
#!/bin/sh -
next=$(date +%s)
while :; do
next=$(( $next + 10 ))
sleep $(( $next - $(date +%s) ))
befehl
done
Das hat pro Aufruf +/- 1 Sekunde Genauigkeit, aber langfri-
stig hast Du im Schnitt genau alle zehn Sekunden einen Auf-
ruf (Du kannst ja testweise an der Stelle des Befehls mal
»date« einsetzen und das ein paar Minuten beobachten).
Voraussetzung ist natürlich, der aufzurufende Befehl selbst
nicht länger als zehn Sekunden zur Ausführung braucht.
Wenn es noch exakter sein muß, würde ich empfehlen, ein
kleines Programm in C zu schreiben. Bei so kleinen Wieder-
holungsintervallen im Sekundenbereich wäre das aufgrund der
Effizienz ohnehin keine allzu schlechte Idee.
Gruß
Olli
-- Oliver Fromme, secnetix GmbH & Co KG, Oettingenstr. 2, 80538 München Any opinions expressed in this message may be personal to the author and may not necessarily reflect the opinions of secnetix in any way. "Der Einsatz von MS-Mailsystemen ist sehr erfolgreich, aber leider vor allem bei der Verbreitung von Viren wie Melissa, Papa oder explore.zip. Dies ist durchaus auch in der Architektur dieser Software begruendet." (unbekannt) To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org with "unsubscribe de-bsd-questions" in the body of the messageReceived on Wed 23 Apr 2003 - 16:02:23 CEST