Re: Frage zu cron/Shellscripting

From: Oliver Fromme <olli(at)secnetix.de>
Date: Wed, 23 Apr 2003 16:02:20 +0200 (CEST)

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 message
Received on Wed 23 Apr 2003 - 16:02:23 CEST

search this site