क्या शेल स्क्रिप्ट किसी फ़ाइल को बदलने और कार्रवाई करने के लिए प्रतीक्षा कर सकती है?


12

मुझे आश्चर्य है कि अगर मैं एक स्क्रिप्ट लिख सकता हूं जो एक फ़ाइल में बदलाव के लिए निगरानी करेगा और परिवर्तन का पता चलने पर कुछ कार्रवाई निष्पादित करेगा।

विस्तृत विवरण:

  1. OpenVPN हर 1 मिनट में एक फाइल पर अपना स्टेटस लिखता है।
  2. मुझे इस स्थिति फ़ाइल को पार्स करने और कार्रवाई करने की आवश्यकता है।
  3. OpenVPN लिखने से पहले स्टेटस फ़ाइल को काट देता है।
  4. मैंने एक नामित पाइप को लिखने की कोशिश की, लेकिन मुझे ऐप में अवांछनीय (लेकिन घातक नहीं) त्रुटियां मिलती हैं, जब यह पाइप को कम करने में विफल रहता है।

यदि वास्तव में संशोधन फ़ाइल में संलग्न है, tail -fतो संभवत: सबसे आसान तरीका है। लेकिन केवल अपील करने के लिए।
एसएफ।

जवाबों:


21

सस्ता n 'गंदा तरीका:

stat -c %Y fileसंशोधन समय बदलने पर लूप और कार्रवाई करें।

शायद बेहतर:

फ़ाइल संशोधन घटनाओं के लिए देखने और अपनी कार्रवाई चलाने के लिए inotify क्रोन सेवा का उपयोग करें:

/path/to/your/file IN_MODIFY /path/to/your/script $#

दूसरे समाधान के लिए +1
माइकल लोमैन


2

inotify इसे करने का सही तरीका होगा। इसी सवाल के लिए कुछ लिनक्सफोर यू पत्रिका संस्करण में ट्यूटोरियल दिए गए हैं।


0

तो एक स्क्रिप्ट है कि:

1) फ़ाइल पर (स्टेटमेंट के साथ)
संशोधन समय की जाँच करता है 2) यदि अंतिम जाँच के समय की तुलना में संशोधन का समय नया है, तो यह
3 बदल गया है ) इसे पार्स करें और अपनी क्रिया करें
4) 1 मिनट के लिए नींद पूरी करें और फिर फिर से सोएं


0

त्वरित और गंदा तरीका:

function wait_file_changed {
    tail -fn0 "$1" | head -n1
}

wait_file_changed /tmp/potato
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.