Bir işlemin bir dosyaya yazmayı tamamladığını nasıl anlayabilirim?


9

Kabuktan doğmuş bir sürecim var. Bir arka plan işlemi olarak çalışıyor ve içindeki bir CSV dosyasına DB aktarıyor /tmp.

Arka plan işleminin ne zaman tamamlandığını (bitti / sonlandırıldığını) veya CSV dosya kilidinin kapandığını nasıl anlayabilirim? Dosyayı yazıldıktan sonra başka bir ana bilgisayara FTP ile aktarmayı planlıyorum, ancak dosya aktarımını başlatmadan önce tam dosyaya ihtiyacım var.


Süreci bir şekilde sizi bilgilendirin ...
Yörüngedeki Hafiflik Yarışları

Yanıtlar:


7

Linux'ta, bir program ona yazarken bile dosya kilitlenmez (pencerelerin aksine).

İşlemin tamamlanıp tamamlanmadığını kontrol etmek için şunu kullanın:

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

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

İşlemin dosyanın açık olup olmadığını kontrol etmek için şunu kullanabilirsiniz:

  • lsof <file> açılan işlemleri listeleyecek <file>

  • ls -l /proc/$(pgrep db-process)/fd işlem tarafından açılan dosya tanımlayıcılarını listeler db-process


7

Bunu yapmak için waityerleşik kabuğu kullanabilirsiniz .

waitBuiltin basitçe tam arka plan işler için bekleyen duraklatma kabuk neden olur. Beklemek için belirli bir işi iletebilir veya tüm işleri bekletebilirsiniz.

Örneğin:

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

Sonuç:

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.