जब कोई फ़ाइल बदलती है तो कमांड निष्पादित करें


9

मेरे पास एक परिदृश्य है जहां मैं अपलोड कर रहा हूं। एक विशिष्ट फ़ोल्डर, / tmp / data_upload, प्रत्येक दिन के लिए .vv फ़ाइलें और पुरानी फ़ाइलों को नए द्वारा बदल दिया जाता है।

डेटा अपलोड होने के बाद मुझे पायथन स्क्रिप्ट चलाने की आवश्यकता है। इसके लिए, मेरे पास क्रॉन जॉब बनाने और फ़ाइल में परिवर्तनों की निगरानी करने का विचार है। मैंने inotify का उपयोग करने की कोशिश की, लेकिन मैं यूनिक्स डोमेन में ज्यादा नहीं हूं। मैं उसे कैसे कर सकता हूँ?

एक बार अपलोड फ़ोल्डर में फ़ाइल बदलने की तारीख, उदाहरण के लिए, / tmp / data_upload के लिए मुझे एक बार स्क्रिप्ट बदलने की जरूरत है।


क्या आपने eradman.com/entrproject को देखा है , इसे स्वयं आज़माया नहीं है लेकिन ऐसा लगता है कि यह संबंधित हो सकता है।
OO

FYI करें, पायथन में inotifyपुस्तकालय उपलब्ध हैं। उदाहरण के लिए यहां मेरे एक उत्तर को देखें: askubuntu.com/a/939392/295286
Sergiy Kolodyazhnyy

जवाबों:


10

आपको क्रोनड (इनोटिफ़ाइ क्रोन डेमॉन) की आवश्यकता हो सकती है जो फ़ाइलों पर परिवर्तनों की निगरानी करेगा और फिर स्क्रिप्ट निष्पादित करेगा।

Incrond नई फ़ाइल जोड़ सकता है, संशोधित कर सकता है, हटा सकता है और बहुत कुछ कर सकता है। यह एक लेख दिखाता है कि किस घटना को कुछ उदाहरण के साथ मॉनिटर कर सकते हैं।

आपके मामले के लिए उदाहरण, आप /etc/incron.d/data_uploadसामग्री के साथ फाइल बना सकते हैं

/tmp/data_upload IN_CREATE,IN_MODIFY /path/to/test.py 

2
जब तक यह सैद्धांतिक रूप से प्रश्न का उत्तर दे सकता है, उत्तर के आवश्यक भागों को शामिल करना और संदर्भ के लिए लिंक प्रदान करना बेहतर होगा
गेराल्ड श्नाइडर

मुझे याद दिलाने के लिए धन्यवाद, मैंने लिंक के लिए संदर्भ जोड़ दिया है।
विजेतारोलन

उत्तर के लिए धन्यवाद, बस incrontab shoudl incrontab -eको रूट के रूप में निष्पादित करने के बाद चरणों को सत्यापित करने के लिए फिर इस लाइन को शामिल करें /tmp/data_upload IN_CREATE,IN_MODIFY test.py ? इतना है कि एक बार मैं एक नई फ़ाइल अपलोड करने के लिए जाँच करने के लिए यह test.py फ़ाइल निष्पादित करना चाहिए? मुझे test.py फ़ाइल कहाँ रखनी चाहिए? क्या मुझे इसके लिए पूर्ण मार्ग प्रदान करने की आवश्यकता है?
एलेक्स

1
मुझे लगता है, आपकी पटकथा के लिए निरपेक्ष मार्ग पर चलना बेहतर होगा। यदि स्क्रिप्ट काम नहीं कर रही है तो आप क्रॉन या सिस्टम लॉग की जांच भी कर सकते हैं
विजोरोलन

क्या आप यह भी दस्तावेज कर सकते हैं कि आप अपने कोड ब्लॉक के साथ किस फाइल का जिक्र कर रहे हैं, जो लोग Incrond (जैसे मेरे) के वाक्यविन्यास से परिचित नहीं हैं वे शायद एक कमांड का उल्लेख कर रहे हैं जिसे आपको कमांड लाइन पर निष्पादित करना है
Ferrybig

1

यदि आप एक बार स्टार्टअप पर एक बार फ़ाइल परिवर्तन करके स्क्रिप्ट को स्वचालित रूप से चलाने के लिए entr का उपयोग कर सकते हैं ls /tmp/data_upload | entr -p script.py

प्रोजेक्ट वेबसाइट: http://eradman.com/entrproject/

ऑनलाइन मैन पेज: https://www.systutorials.com/docs/linux/man/1-entr/


0

watchexec( Https://crates.io/crates/watchexec ) कमांड लाइन उपयोगिता लगता है कि वास्तव में चाहते क्या आप की जरूरत है, हालांकि मैं यह स्थापित करने के लिए जंग का निर्माण उपकरण आपकी मशीन पर स्थापित करने की आवश्यकता होगी विश्वास करते हैं, तो यह है कि एक हो सकता है सौदा तोड़ने वाला


1
मुझे जंग में लिखे सॉफ्टवेयर का उपयोग करना पसंद है क्योंकि आप जानते हैं कि इसे 2004 या कुछ और में नहीं छोड़ा गया था। यह लगभग नया होना है।
नथानिएल पिसार्स्की

0

मेरा सामान्य दृष्टिकोण शास्त्रीय यूनिक्स findउपयोगिता के साथ बेला होगा । उदाहरण के लिए, कमांड

find /tmp/upload_data/*.csv -mtime -1 -exec /home/myname/test.py

इसमें कोई भी .csvफ़ाइल /tmp/upload_dataएक दिन पहले से कम संशोधित की गई है, और test.pyयदि यह किसी भी मिल जाए तो अपनी चलाएं । बेशक, यदि आपकी test.pyफ़ाइल किसी अन्य निर्देशिका में है, तो आप इसके अनुसार अपना पथ अपडेट करना चाहते हैं।

यदि आप cronदिन में एक से अधिक बार अपनी नौकरी चलाते हैं, तो आप मिनटों में संशोधन के बाद से अधिकतम समय निर्दिष्ट mminकरने के findलिए विकल्प का उपयोग कर सकते हैं । उदाहरण के लिए,

find /tmp/upload_data/*.csv -mmin -60 -exec /home/myname/test.py

.csv60 मिनट से कम समय पहले संशोधित की गई फ़ाइलों के लिए खोज करेंगे - यदि क्रोन प्रति घंटा काम करता है तो उपयोगी है।

दो निष्पक्ष चेतावनी क्रम में हैं: सबसे पहले, यह उन .csvफ़ाइलों को नहीं पकड़ेगा जिन्हें आपने पूरी तरह से हटा दिया था। आप इनके लिए अलग से जाँच कर सकते हैं। दूसरा, मेरे पास इसके किसी भी परीक्षण का समय नहीं था। मेरे कोड में टाइपो की अपेक्षा करें जिसे आपको अपने आप से डिबग करना होगा।


1
-cmdवाक्य रचना क्या है ? IIRC findलेता है -exec cmd ;...
डी। बेन नोबल

मैंने इस प्रश्न को पोस्ट करने से पहले एक कोशिश की है, यह दूसरी 3 जी क्रोन नौकरियों पर लगातार ठीक से काम नहीं कर रहा है
एलेक्स 31

@D। बेन नोबल: आप सही कह रहे हैं। मैंने शेल कमांड के साथ फाइंड-इंटरनल कमांड को मिलाया। फिक्स्ड। सुधारों के लिए धन्यवाद!
थॉमस ब्लैंकेनहॉर्न
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.