लिनक्स: लगातार एक ही तरह से फाइलों को सिंक्रोनाइज़ करना


61

परिदृश्य: एक आईडीई लिनक्स डेस्कटॉप बॉक्स पर स्थापित की जाती है, जो स्थानीय रूप से PHP फाइलों को संपादित करती है। हर बार जब मैं किसी फ़ाइल को सहेजता हूं, तो मैं चाहता हूं कि यह परिवर्तन लिनक्स सर्वर पर दिखाई दे, जहां अपाचे चल रहा है। सर्वर में ssh (और सांबा और उस मामले के लिए nfs) है।

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

लिनक्स पर, कोई यह तर्क दे सकता है कि sshfs को पूरी तरह से सिंक्रनाइज़ेशन की आवश्यकता को पूरा करने के लिए नियोजित किया जा सकता है। खिड़कियों पर, एक सांबा-शेयर भी ऐसा ही करेगा। हालाँकि, मैं चाहता हूं कि IDE स्थानीय फ़ाइलों (SSD डिस्क पर!) के साथ काम करे, जो कि PHP इंडेक्सिंग और व्हाट्सन को करने के लिए नेटवर्क पर न जाए, जिसमें उम्र लगती है।

लेकिन sshfs समाधान का एक हिस्सा हो सकता है - फिर भी दो स्थानीय निर्देशिकाओं के बीच निरंतर सिंक्रनाइज़ेशन की आवश्यकता है।

किसी भी विचार या संकेत?


rsync टूल का उपयोग करने पर विचार करें, या वेबसर्वर के दस्तावेज़ रूट में एक फ़ोल्डर साझा करना ताकि आप सीधे विंडोज़ के तहत फाइलों पर काम कर सकें
Vinicius Kamakura

2
rsync "वन गो" है। मुझे लगातार अपडेट की आवश्यकता है, यहां पूरा बिंदु है - मैं एक फ़ाइल को संपादित करता हूं, इसे सहेजता हूं, और उत्पाद / प्रणाली / विचार जो मैं अनुरोध करता हूं वह इस सहेजें-कार्रवाई को उठाएगा और नया संस्करण तुरंत अपलोड करेगा। NB: दोनों पक्ष लिनक्स हैं। NB2: मैं स्थानीय फ़ाइलों को संपादित करना चाहता हूं, अन्यथा sshfs स्वयं इसे काट देंगे।
स्टॉल्सविक ऑग

6
ऑफ-टॉप विषय मतदाता, यह एक सीमा मामला है, लेकिन मुझे लगता है कि यह अक्सर पूछे जाने वाले प्रश्न में "प्रोग्रामर्स द्वारा आमतौर पर उपयोग किए जाने वाले उपकरण" के तहत काफी स्पष्ट रूप से गिरता है।
कार्ल बेवेलफेल्ट

हालांकि यह एक सटीक मिलान नहीं है, आप पर लग सकता है overlayfs
PHS

जवाबों:


57

आप inotifywaitइनोटिफ़ाइ-टूल्स पैकेज से भी उपयोग कर सकते हैं ।

inotifywait -r -m -e close_write --format '%w%f' /tmp | while read MODFILE
do
    echo need to rsync $MODFILE ...
done

13
पर inotify उपकरण वेबसाइट , वहाँ एक rsync को गति प्रदान करने inotify-प्रतीक्षा का उपयोग करने का एक बहुत अच्छा उदाहरण है।
कार्ल ब्वेलफेल्ट

मैं कल रात इस सटीक चीज़ की तलाश में था! आह मैं सुपर उपयोगकर्ता प्यार
CenterOrbit

क्या ऐसा करने का कोई तरीका है लेकिन सॉकेट को खुला रखें? rsync/ scpssh कनेक्शन स्थापित करते समय एक कष्टप्रद विलंब होता है।
फ्लैश

1
@ ठीक है, सॉकेट को खुला रखने के लिए आप SSH मल्टीप्लेक्सिंग का उपयोग कर सकते हैं ।
विल एंगले

31

Lsyncd इसके लिए एक अच्छा समाधान होगा।

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

बॉटम-लाइन, यह अन्य उत्तरों द्वारा सुझाए गए अनुसार काम करने के लिए उसी तरह के टूल का उपयोग करता है (inotify और rsync), लेकिन शेल स्क्रिप्टिंग से परिचित न होने वाले व्यक्ति के लिए सेट करना आसान है।


न केवल आसान है, यह बिना rsyncing के चलती निर्देशिका जैसी स्थितियों को भी ठीक से संभालने की कोशिश करता है।
Ciantic

5
खबरदार: इस कार्यक्रम में कुछ समस्याग्रस्त विशेषताएं हैं। इसे लिखने के रूप में: 1. यह दूरस्थ फ़ाइलों को प्रति स्रोत पर मौजूद नहीं हटाता है। 2. "रिमोट:" होम फोल्डर के बजाय "रिमोट: /" को संदर्भित करता है। 3. यह अवमूल्यन करता है, इसलिए आपको नहीं पता कि क्या चल रहा है। 4. यह तुरंत TERM सिग्नल का सम्मान नहीं करता है।
फ्रेडरिक

27

मुझे इसकी बहुत आवश्यकता है क्योंकि मेरे कोड को दूरस्थ बक्से पर चलाने की आवश्यकता है और मैं स्थानीय मशीन पर कोड लिखता हूं। मुझे एक अच्छा उपकरण मिला, जिसका उपयोग आप अपने स्थानीय फ़ोल्डरों पर लगातार निगरानी रखने और उन्हें दूरस्थ या स्थानीय फ़ोल्डर में सिंक करने के लिए कर सकते हैं: https://github.com/axkibe/lsyncd

Ssh पर रिमोट मशीन के साथ एक स्थानीय dir को लगातार सिंक करने का एक सरल आदेश होगा:

lsyncd -log all -nodaemon -rsyncssh <local_path> <user>@<ip> <remote_path>

किसी भी अन्य rsync कमांड के साथ की तरह, सुनिश्चित करें कि आप फ़ोल्डर को सही मार्ग दें और कमांड चलाने से पहले जांच लें। मैंने अपनी एक रिमोट मशीन को लगभग मार दिया था क्योंकि मैं एक सही गंतव्य निर्देशिका देने से चूक गया था। सुनिश्चित करें कि यो दूरस्थ पथ को याद नहीं करते हैं और '/' का उपयोग नहीं करते हैं जब तक कि आपको पता नहीं है कि आप क्या कर रहे हैं।


यह पोस्ट किए जाने के तीन साल बाद भी बहुत अधिक उत्थान के योग्य है
FliiFe

महान काम करता है, अंत में यह मेरे मैक ओएस सिएरा पर काम कर रहा है, कमाल का काम करता है।
एरिक वान डी वेन

2

यदि आपको फाइल सिस्टम का निरीक्षण करने की आवश्यकता है, तो इसे करने का तरीका है। जब फाइलसिस्टम में बदलाव होता है तो मैं एक साधारण पाइथन स्क्रिप्ट लिखता हूँ जो पाइनेटोटिफाई का उपयोग करता है सिंक के लिए। प्रलेखन देखें । आप कुछ प्रेरणा के लिए autosync.py की जांच भी कर सकते हैं । मज़े करो।


1

मैंने एक बार क्या किया था ls -lएक पाश स्क्रिप्ट कुछ लूप में चल रहा है (कुछ नींद के साथ) और पिछले आउटपुट की तुलना में। यदि यह बदल गया है, तो अपना सिंक्रनाइज़ेशन करें।

#!/bin/bash

listcommand="ls -l $*"

newfilelist=$( $listcommand )
while true
do
   if [[ $oldfilelist != $newfilelist ]]
   then
      oldfilelist=$newfilelist
      # run your synchronization tool
   fi
   sleep 10 || exit 2 
   newfilelist=$( $listcommand )
done

इस स्क्रिप्ट को एक नए टर्मिनल में फ़ाइल नाम के साथ तर्क (अपने सिंक्रनाइज़ेशन टूल में डालने के बाद) से शुरू करें।

(मैंने इसका उपयोग संकलन शुरू करने के लिए किया, सिंक्रनाइज़ करने के लिए नहीं, लेकिन यह इसी तरह से काम करेगा।)


-1

बहुत अधिक सरल दृष्टिकोण:

अपने / var / www को सांबा (या nfs) के साथ निर्यात करें और सर्वर पर सीधे फाइलों पर काम करें।

एक और समाधान: अधिकांश आईडीई विभिन्न तैनाती विन्यास की अनुमति देते हैं - अगर कोई ऐसा है जो आपको सूट करता है तो जांचें।

या एक स्रोत कोड प्रबंधन प्रणाली सेट करें जैसे Git, Bazaar इत्यादि।

सौभाग्य !!


3
जवाब के लिए धन्यवाद। हालाँकि, मैंने विशेष रूप से प्रश्न में इस दृष्टिकोण को बाहर रखा।
स्टॉल्सविक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.