जब कोई प्रक्रिया किसी फ़ाइल पर लिखना समाप्त करती है, तो मैं कैसे बता सकता हूं?


9

मेरे पास एक प्रक्रिया है जिसे शेल से देखा गया है। यह एक पृष्ठभूमि प्रक्रिया के रूप में चल रहा है और एक DB को CSV फ़ाइल में निर्यात कर रहा है /tmp

मैं कैसे बता सकता हूं कि जब पृष्ठभूमि की प्रक्रिया पूरी हो चुकी है (समाप्त / छोड़ दी गई है) या अगर सीएसवी फ़ाइल लॉक बंद हो गया है? मैंने फ़ाइल को किसी अन्य होस्ट के पास लिखने के लिए उसे एक बार एफ़टीपी करने की योजना बनाई है, लेकिन फ़ाइल स्थानांतरण शुरू करने से पहले मुझे पूरी फ़ाइल की आवश्यकता है।


इस प्रक्रिया से आपको किसी तरह अवगत
कराएँ

जवाबों:


7

लिनक्स पर, फ़ाइल तब भी लॉक नहीं होती है जब कोई प्रोग्राम उसे लिख रहा हो (विंडोज़ के विपरीत)।

यह जाँचने के लिए कि क्या प्रक्रिया पूरी हो गई है, उपयोग करें:

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

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

यह देखने के लिए कि क्या प्रक्रिया में फ़ाइल खुली है, आप उपयोग कर सकते हैं

  • lsof <file> यह उन प्रक्रियाओं को सूचीबद्ध करेगा जो खुल गए <file>

  • ls -l /proc/$(pgrep db-process)/fd प्रक्रिया द्वारा खोले गए फ़ाइल विवरणों को सूचीबद्ध करता है db-process


7

आप इसे waitपूरा करने के लिए निर्मित शेल का उपयोग कर सकते हैं ।

waitनिर्मित बस खोल पूरा करने के लिए पृष्ठभूमि नौकरियों के लिए इंतज़ार कर रोकने के लिए कारण बनता है। आप या तो इसे प्रतीक्षा करने के लिए एक विशिष्ट नौकरी पास कर सकते हैं, या यह सभी नौकरियों के लिए प्रतीक्षा कर सकता है।

उदाहरण के लिए:

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

जिसके परिणामस्वरूप:

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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.