मैं फ़ाइल संशोधन पर rsync कैसे ट्रिगर करूं?


18

मैं फ़ोल्डरों के साथ सिंक कर सकता हूं rsync -avz /directory /target, अब मैं ऐसा करना चाहता हूं अगर मैंने एक फाइल को बदल दिया है /directoryतो rsyncस्वचालित रूप से कॉल किया जाना चाहिए।

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

मुझे आशा है कि किसी के पास ऐसा करने का विचार है, crontabयह अच्छा नहीं होगा, क्योंकि यह प्रत्येक एक्स मिनट में निष्पादित होता है, इसलिए यदि मैं कुछ भी नहीं करता हूं, तो यह अभी भी कॉल करेगा, rsyncलेकिन अगर मैंने अपनी फाइल को संशोधित नहीं किया है।

सादर

जवाबों:


18

crontab अच्छा नहीं होगा, क्योंकि यह प्रत्येक x सेकंड / मिनट में निष्पादित होता है, इसलिए यदि मैं कुछ भी नहीं करता हूं, तो भी यह rsync को कॉल करेगा, लेकिन अगर मैंने अपनी फ़ाइल को संशोधित नहीं किया है

rsyncकेवल उन फ़ाइलों को सिंक करेगा जिन्हें बदल दिया गया है। अगर कुछ नहीं बदला है, तो यह बाहर निकल जाएगा। यह वास्तव में एक न्यूनतम उपरि है।

यदि आप इससे दुखी हैं कि आप इसका उपयोग कर सकते हैं inotifywait:

while inotifywait -r /directory/*; do
    rsync -avz /directory /target
done

यह अधिक त्वरित होगा लेकिन यह हर बार आपके द्वारा सेव किए जाने वाले काम करेगा ।


1
अच्छी तरह से यह समस्या लगता है, कि inotify साझा किए गए nfs फ़ोल्डर की जांच करने में सक्षम नहीं है। यह सुनिश्चित करने के लिए कि मैं क्या करना चाहता हूं, यह बताने के लिए कि मैंने वर्चुअल बॉक्स योनि के साथ स्थापित किया है, मेरे पास एक साझा फ़ोल्डर "प्रोजेक्ट" है जो इसे बूट पर रखा गया है, मेरी सभी वेबसर्वर फाइलें वहां स्थित हैं, इसलिए मैं उन्हें अपने होस्ट पर संशोधित कर सकता हूं सिस्टम (win7) जैसा कि मैंने बताया कि वर्चुअल बॉक्स साझा किए गए फ़ोल्डर वास्तव में धीमे हैं, इसलिए समाधान माउंट किए गए एनएफएस फ़ोल्डर को दूसरी जगह पर सिंक करने के लिए हो सकता है जैसे / var / www, लेकिन सामान्य तरीके काम नहीं कर रहे हैं, मैंने फ़ाइलों को बदलने की कोशिश की, icrontab, gues mamin या
पारिवारिक

@BlackScorp वास्तविक रूप से आप केवल cronning rsync के साथ फंस गए हैं और यह तय करने दे रहे हैं कि सिंक्रनाइज़ करने की आवश्यकता है। जैसा कि मैंने जवाब में कहा, यह एक भयानक बुरा विकल्प नहीं है।
ओली

1
अन्य विकल्प दूर से परिवर्तनों का पता लगाने की कोशिश करने के बजाय मेजबान से फ़ाइलों को धकेलना है।
ओली

अच्छी तरह से इस समाधान मैं पहले इस्तेमाल किया, यह 2 समस्याएं हैं: 1) मैं फ़ाइलों को संपादित करने के लिए अपने वर्चुअल बॉक्स को हर बार समेटना था, जिसका मतलब है, मेरा वर्चुअल चलना चाहिए, त्वरित संपादन अब काम नहीं कर रहा है 2) मुझे पता नहीं क्यों, लेकिन क्योंकि मेरे आईडीई (नेटबीन्स) सांबा के प्रोजेक्ट स्कैनिंग की प्रक्रिया में 99% सीपीयू उपयोग दिखाया गया है और वर्चुअल बॉक्स के भीतर सब कुछ ठीक है, जबकि मैं rsyn + क्रोनजोब समाधान या वेबसर्वर में php बनाने की कोशिश करूँगा
ब्लैकस्कॉर्प

inotifywaitसमाधान एक बारीक लेकिन महत्वपूर्ण दोष यह है: यह परिवर्तन जो हुआ जब पता नहीं लगा पाया rsyncचल रहा है। निम्नलिखित स्थिति पर विचार करें: फ़ाइल ए को बदल दिया गया है; rsync को ट्रिगर किया गया है; जब rsync फाइल A को लगभग सिंक्रोनाइज़ करता है, फ़ाइल B को बदल दिया जाता है। अब, rsyncसमाप्त हो गया है और inotifywaitचल रहा है, लेकिन फ़ाइल B सिंक्रनाइज़ नहीं है और कुछ अगले परिवर्तन तक सिंक्रनाइज़ नहीं किया जाएगा। @Arigion द्वारा सुझाए अनुसार उपयोग करने पर विचार करेंlsyncd
MarSoft

6

आप Lsyncd (लाइव सिंकिंग डेमॉन) का उपयोग कर सकते हैं :

Lsyncd एक स्थानीय निर्देशिका ट्री ईवेंट मॉनिटर इंटरफ़ेस (inotify या fsevents) देखता है। यह कुछ सेकंड के लिए घटनाओं को एकत्र और संयोजित करता है और फिर परिवर्तनों को सिंक्रनाइज़ करने के लिए एक (या अधिक) प्रक्रिया (तों) को जन्म देता है। डिफ़ॉल्ट रूप से यह rsync है। Lsyncd इस प्रकार एक लाइट-वेट लाइव मिरर सॉल्यूशन है जो कि तुलनात्मक रूप से आसान है जिसे नए फाइल सिस्टम या ब्लॉक डिवाइस की आवश्यकता नहीं है और स्थानीय फाइल सिस्टम प्रदर्शन को बाधित नहीं करता है।

उदाहरण के लिए Ubuntu 16.04 के लिए एक ट्यूटोरियल है


2

आप उपयोग कर सकते हैं inotifywaitऔर rsyncinotifywaitघटना modify,create,deleteसक्षम होने के साथ । इस तरह से आप अपने सर्वर के साथ तभी तालमेल बिठाएंगे जब फ़ाइल बदल जाएगी, अन्यथा यह तब भी सिंक होगा जब कोई फ़ाइल पढ़ी जाती है (यदि कोई परिवर्तन हो तो जांच करने के लिए संपादक आपकी फ़ाइल को कई बार पढ़ते हैं)। इस प्रकार कहा:

while inotifywait -r -e modify,create,delete /directory; do
    rsync -avz /directory /target
done

यह पता नहीं चलेगा कि rsync चल रहा है या नहीं। lsyncd@Arigion द्वारा सुझाए अनुसार उपयोग करने पर विचार करें ।
मार्सॉफ्ट

यह प्रत्येक परिवर्तन के बाद सभी फाइलों पर सभी घटनाओं को फिर से लागू करेगा ... और जब यह लागू हो रहा है तो उस अवधि में कोई भी परिवर्तन नहीं दिखेगा ...
किसी को

0

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

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