pollekowski
Goto Top

Bash For Schleife mit Sekundenabfrage

Ein Script soll alle 10 Sekunden einen Befehl ausführen.

Hallo, suche eine Möglichkeit unter Debian Bash mittels einer FOR Schleife alle 10 Sekunden etwas auszuführen.

Ich dachte dabei so in die Richtung "$(date | cut -c 19) -eq 0" dann tue etwas. Das ganze hab ich als funktionierendes Konstrukt mit Funktionen und If Abfrage ( if [ $(date | cut -c 19) -eq 0 ] ), da gibt es aber irgendwo ein Memory Leak und ich versuchs dehalb auf FOR umzustellen.

Wer hat ne Idee?

#!/bin/bash
for 0 in $(date | cut -c 19)
	do
	echo $date
done

Content-ID: 143057

Url: https://administrator.de/contentid/143057

Ausgedruckt am: 25.11.2024 um 12:11 Uhr

Korrn
Korrn 18.05.2010 um 14:56:37 Uhr
Goto Top
Hallo,

mit folgendem Konstrukt kannst Du ein Pause von 10 Sekunden zwischen die Anweisungen bringen, damit ist aber jeder Durchlauf 10 Sekunden plus Zeitbedarf der Anweisungen lang:

while true
do
 # Anweisungen
 sleep 10
done

Ansonsten must du mit zwei verschachtelten Schleifen arbeiten:
while true
do
 # Anweisungen
while [ ! "$(date +%S |cut -c 2) == "0" ]  
 do
  continue
 done
done

Oh, und da ist ist kein "Memory Leak", versuch mal 'man date' und 'man for'.
it-frosch
it-frosch 18.05.2010 um 15:02:44 Uhr
Goto Top
Hallo Pollekowski,

warum nimmst du kein cron job der alle 10sek dein Script ausführt?
Die Ausführung deines Scripts sollte natürlich wenige als 10 s dauern. face-wink
Pollekowski
Pollekowski 18.05.2010 um 15:29:49 Uhr
Goto Top
Das Script soll 24 h lang laufen und alle 10 Sekunden einen Ping absetzen. Incl. Logfile schreiben und wenn Timeout kommt in drei Eskalationsstufen Email, SMS und einen Asterisk Befehl aufrufen. Da ist das leider keine Option face-sad
Pollekowski
Pollekowski 18.05.2010 um 15:38:05 Uhr
Goto Top
Hallo Korrn#, hab Deinen Rat beherzigt und das Script mal folgendermasen eingedampft.

while [ $(date +%H%M%S) -ne 235959 ] ; do # Script beendet sich um 23Uhr 59Min 59Sek

        echo Sekunde ist $(date | cut -c 19)
        if [ $(date | cut -c 19) -eq 0 ] # If second is EQU 00, 10, 20, 30, 40, 50 run ping
        then
                VAR_TIMESTAMP=$(date | cut -c 12-19)
                ping $VAR_HOSTIP -c 1 -W 2 > $VAR_TMP
                VAR_LATENCY=$(cut -s -d= -f4 $VAR_TMP)
                echo $VAR_TIMESTAMP $VAR_LATENCY >> $VAR_LOG
                sleep 8
        else
                sleep 0.777
        fi
done

Jetzt funktioniert es wie gewünscht und ich bekomme ein sauberes Logfile alle 10 Sekunden mit Uhrzeit und Latency versehen.

Trotzdem zeigt mir TOP an, dass der Speicher für dieses Script sehr langsam aber stetig wächst. Woran kann das liegen?

Gruß Polle
it-frosch
it-frosch 18.05.2010 um 15:41:17 Uhr
Goto Top