Wie kann ich feststellen, wann ein Prozess das Schreiben in eine Datei abgeschlossen hat?

9

Ich habe einen Prozess, der aus einer Shell hervorgegangen ist. Es wird als Hintergrundprozess ausgeführt und exportiert eine Datenbank in eine CSV-Datei in /tmp.

Wie kann ich feststellen, wann der Hintergrundprozess abgeschlossen ist (beendet / beendet) oder ob die CSV-Dateisperre geschlossen wurde? Ich habe vor, die Datei nach dem Schreiben per FTP auf einen anderen Host zu übertragen, benötige jedoch die vollständige Datei, bevor ich mit der Dateiübertragung beginne.

user34210
quelle
Lassen Sie sich von dem Prozess irgendwie informieren ...
Leichtigkeitsrennen im Orbit

Antworten:

7

Unter Linux ist die Datei auch dann nicht gesperrt, wenn ein Programm darauf schreibt (im Gegensatz zu Windows).

Verwenden Sie Folgendes, um zu überprüfen, ob der Vorgang abgeschlossen ist:

while [[ 1 ]]; do
  pgrep dbprocess &>/dev/null

  if [[ $? -eq 0 ]]; then
    echo still running
  else
    echo finished
    # start ftp transfer
  fi
  sleep 2
done

Sie können verwenden, um zu überprüfen, ob der Prozess die Datei geöffnet hat

  • lsof <file> Es werden die geöffneten Prozesse aufgelistet <file>

  • ls -l /proc/$(pgrep db-process)/fd listet die vom Prozess geöffneten Dateideskriptoren auf db-process

Sebastian
quelle
7

Sie können die integrierte waitShell verwenden, um dies zu erreichen.

Das waiteingebaute System bewirkt lediglich, dass die Shell pausiert und auf den Abschluss von Hintergrundjobs wartet. Sie können ihm entweder einen bestimmten Job zum Warten übergeben oder ihn auf alle Jobs warten lassen.

Zum Beispiel:

echo $(date): starting
sleep 5 &
echo $(date): do something else
wait
echo $(date): background job finished

Was dazu führt:

Thu Sep 25 12:06:48 EDT 2014: starting
Thu Sep 25 12:06:48 EDT 2014: do something else
Thu Sep 25 12:06:53 EDT 2014: background job finished
Patrick
quelle