¿Cómo puedo saber cuándo un proceso ha terminado de escribir en un archivo?


9

Tengo un proceso que se ha generado a partir de un shell. Se ejecuta como un proceso en segundo plano y exporta una base de datos a un archivo CSV /tmp.

¿Cómo puedo saber cuándo se completó el proceso en segundo plano (finalizó / salió) o si el bloqueo del archivo CSV se ha cerrado? Planeo enviar el archivo FTP a otro host una vez que está escrito, pero necesito el archivo completo antes de comenzar la transferencia del archivo.


Hacer que el proceso de informar que de alguna manera ...
Luminosidad razas en órbita

Respuestas:


7

En Linux, el archivo no está bloqueado incluso cuando un programa le está escribiendo (a diferencia de Windows).

Para verificar si el proceso se ha completado, use:

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

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

Para verificar si el proceso tiene el archivo abierto, puede usar

  • lsof <file> enumerará los procesos que se abrieron <file>

  • ls -l /proc/$(pgrep db-process)/fd enumera los descriptores de archivo abiertos por el proceso db-process


7

Puede usar el waitshell incorporado para lograr esto.

La waitconstrucción simplemente hace que el shell se detenga esperando que se completen los trabajos en segundo plano. Puede pasarle un trabajo específico para esperar o hacer que espere todos los trabajos.

Por ejemplo:

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

Lo que resulta en:

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.