Unix-Skript: Warten Sie, bis eine Datei vorhanden ist

11

Ich benötige ein Skript, das darauf wartet, dass eine (examplefile.txt) im Verzeichnis / tmp angezeigt wird

und sobald festgestellt wurde, dass das Programm gestoppt wird, andernfalls wird die Datei in den Ruhezustand versetzt, bis sie gefunden wurde

Bisher habe ich:

wenn [ ! -f /tmp/examplefile.txt]

dann

Cidricc
quelle

Antworten:

16

Diese Bash-Funktion wird blockiert, bis die angegebene Datei angezeigt wird oder ein bestimmtes Zeitlimit erreicht ist. Der Exit-Status ist 0, wenn die Datei vorhanden ist. Ist dies nicht der Fall, gibt der Beendigungsstatus an, wie viele Sekunden die Funktion gewartet hat.

wait_file() {
  local file="$1"; shift
  local wait_seconds="${1:-10}"; shift # 10 seconds as default timeout

  until test $((wait_seconds--)) -eq 0 -o -f "$file" ; do sleep 1; done

  ((++wait_seconds))
}

Und so können Sie es verwenden:

# Wait at most 5 seconds for the server.log file to appear

server_log=/var/log/jboss/server.log

wait_file "$server_log" 5 || {
  echo "JBoss log file missing after waiting for $? seconds: '$server_log'"
  exit 1
}

Ein anderes Beispiel:

# Use the default timeout of 10 seconds:
wait_file "/tmp/examplefile.txt" && {
  echo "File found."
}
Elifarley
quelle
11
until [ -f /tmp/examplefile.txt ]
do
     sleep 5
done
echo "File found"
exit

Alle 5 Sekunden wird es aufwachen und nach der Datei suchen. Wenn die Datei angezeigt wird, wird sie aus der Schleife entfernt. Sie erfahren, dass die Datei gefunden wurde, und werden beendet (nicht erforderlich, aber aufgeräumt).

Fügen Sie das in ein Skript ein und starten Sie es als Skript &

Das wird es im Hintergrund laufen lassen.

Abhängig von der verwendeten Shell kann es zu geringfügigen Unterschieden in der Syntax kommen. Aber das ist der Kern davon.

Jeff Dodd
quelle