Ich schreibe Shell-Skripte, wo ziemlich regelmäßig einige Sachen in eine Datei geschrieben wird, nach denen eine Anwendung ausgeführt wird, die diese Datei liest. Ich finde, dass die Netzwerklatenz durch unsere Firma sehr unterschiedlich ist, so dass eine einfache sleep 2
zum Beispiel nicht robust genug sein wird.Wie mit NFS Latenz in Shell-Skripten umgehen
Ich versuchte, ein (konfigurierbar) Timeout-Schleife wie folgt zu schreiben: für test="[ -e $somefilename ]"
waitLoop()
{
local timeout=$1
local test="$2"
if ! $test
then
local counter=0
while ! $test && [ $counter -lt $timeout ]
do
sleep 1
((counter++))
done
if ! $test
then
exit 1
fi
fi
}
Dies funktioniert. Das Testen der Existenz ist jedoch nicht genug, manchmal muss ich testen, ob eine bestimmte Zeichenfolge in die Datei geschrieben wurde. Ich habe versucht test="grep -sq \"^sometext$\" $somefilename"
, aber das hat nicht funktioniert. Kann mir jemand sagen warum?
Gibt es andere, weniger ausführliche Optionen, um einen solchen Test durchzuführen?
Wäre es möglich, einfach auf die Datei zu laufen, und nur die Ausgabe von Schwanz (d. H. Die letzten Zeilen) zu überprüfen? Das geht davon aus, dass Tail cleverer ist als das Skript, um zu überprüfen, wann sich eine Datei ändert (Und die Wahrscheinlichkeit ist, dass der Tail es richtiger macht) – nos
Ich denke, der richtige Ansatz hängt davon ab, was "ein paar Sachen" sind und was die "Anwendung" ist. Kannst du das wirkliche Problem, das du lösen willst, genauer beschreiben? Die geschriebene Frage ist ein wenig vage; Es kann ganz andere Ansätze geben, an die Sie nicht gedacht haben. –
Siehe meine bearbeitete Antwort. –