सॉफ्टवेयर दो निर्देशिकाओं (स्थानीय / दूरस्थ) को सिंक्रनाइज़ करने के लिए


9

मुझे ऐसे सॉफ़्टवेयर की आवश्यकता है जो हर 5 सेकंड में निर्देशिका (ए) में परिवर्तन का पता लगाए और दूरस्थ निर्देशिका से / (बी) में परिवर्तित फ़ाइलों को अपलोड / हटाएं।

मुझे गैर-वाणिज्यिक सॉफ़्टवेयर मिला, https://github.com/devstructure/doubledown । मैं सोच रहा हूं कि क्या कोई वाणिज्यिक विकल्प हैं?

जवाबों:


12

rsync निश्चित रूप से इस काम के लिए सही उपकरण है। यह निर्देशिकाओं को सिंक्र में रखने के लिए मौजूद है और इसे बहुत हद तक स्मार्ट के साथ कर सकता है। उदाहरण के लिए: यह केवल डेल्टास को स्थानांतरित कर देगा जब भी यह कर सकता है और यह ssh सुरंगों पर काम कर सकता है।

मान लें कि आपके पास मशीन स्रोत है जो निर्देशिका ट्री /my/treeऔर मशीन सिंक के आपके लाइव संस्करण को होस्ट करता है जिसे आप इसके साथ निकटता में रखना चाहते हैं। यदि आपके पास सिंक पर एक ssh खाता है , तो आप स्रोत का उपयोग rsync से निम्नानुसार कर सकते हैं:

rsync -avz --delete -e ssh /my/tree/ remoteuser@sink:/my/tree

यह मानता है कि आप सिंक/my/tree पर ठीक उसी स्थान पर चाहते हैं जैसा कि आपके पास स्रोत पर है । बेशक, आपको इसे उसी स्थान पर रखने की आवश्यकता नहीं है।

कमांड लाइन को तोड़ना:

  • -avz: संग्रह मोड, क्रिया से बाहर, स्थानांतरण के दौरान संपीड़न का उपयोग करें
  • --delete: सिंक पर मौजूद फ़ाइलें हटाएं जो स्रोत पर मौजूद नहीं हैं
  • -e ssh: कनेक्शन विधि के रूप में ssh का उपयोग करें

यह कॉल, निश्चित रूप से आपसे पासवर्ड मांगेगी जब आप इसे बनाते हैं। यदि आप कुछ स्वचालित फैशन में ऐसा करना चाहते हैं, तो आपको मशीनों पर खातों के बीच कुछ कुंजियों को साझा करने और ssh कनेक्शन बनाने के लिए सार्वजनिक-निजी कुंजी एन्क्रिप्शन का उपयोग करने की आवश्यकता होगी।

इस rysnc के लिए अपनी मुख्य जोड़ी सेट करने के लिए, अपने सोर्स मशीन पर निम्न कमांड चलाएँ :

> ssh-keygen -t rsa -b 2048 -f ~/.ssh/my-rsync-key 
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): [press enter here] 
Enter same passphrase again: [press enter here] 
Your identification has been saved in ~/.ssh/my-rsync-key. 
Your public key has been saved in ~/.ssh/my-rsync-key.pub. 
The key fingerprint is: 
2e:28:d9:ec:85:21:e7:ff:73:df:2e:07:78:f0:d0:a0 root@source

> chmod 600 ~/.ssh/my-rsync-key

काम करने के लिए इस कुंजी युग्म के लिए हम की सामग्री को जोड़ने की जरूरत है ~/.ssh/my-rsync-key.pubकरने के लिए ~<remoteuser>/.ssh/authorized_keysपर फ़ाइल सिंक मशीन।

पहले फाइल को सिंक मशीन पर कॉपी करें :

scp ~/.ssh/my-rsync-key.pub remoteuser@sink:~

फिर सिंक मशीन पर जाएं और मशीन पर रिमोटस के रूप में निम्नलिखित को चलाकर कुंजी आयात करें :

> if [ ! -d ~/.ssh ]; then mkdir ~/.ssh ; chmod 700 ~/.ssh ; fi
cd ~/.ssh/ 
if [ ! -f authorized_keys ]; then touch authorized_keys ; chmod 600 authorized_keys ; fi 
cat ~/my-rsync-key.pub >> authorized_keys
rm ~/my-rsync-key.pub

आपके स्रोत और सिंक मशीनों के बीच ssh कनेक्शन को लॉक करने के अतिरिक्त सुझावों के लिए मैं इस पृष्ठ पर एक नज़र डालने की सलाह देता हूं ।

अपने स्रोत मशीन से आप परीक्षण कर सकते हैं कि यह सेटअप चल रहा है:

rsync -avz --dry-run -e "ssh -i ~/.ssh/my-rsync-key" /my/tree/ remoteuser@sink:/my/tree

यह एक rsync का सूखा भाग करेगा। यदि आप rsync कमांड को देख रहे हैं और उन फाइलों की तुलना कर रहे हैं जिन्हें आप जानते हैं कि चीजें ठीक से सेटअप हैं।

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

#!/bin/sh
SINK_INSTANCE=remoteuser@sink
DIR=/my/tree
KEY=~/.ssh/my-rsync-key
LOG = ~/my_rsync.log
LOCK = ~/my_rsync.lock
SOURCE=/my/tree

exec 9>${LOCK}
if ! flock -n 9  ; then
    echo "Another instance of your rsync is already running";
    exit 1
fi

echo "----------" >> ${LOG}
echo `date` >> ${LOG}

rsync -avz --delete -e "ssh -i ${KEY}" \
    ${SOURCE}/ {SINK_INSTANCE}:${SOURCE} 2>&1 >> ${LOG}

उस के रूप में सहेजें ~/my_rsync.sh

वह स्क्रिप्ट आपके लिए rsync करने का ध्यान रखेगी। अब आपको केवल लॉन्चड के माध्यम से इसे सेट करने की आवश्यकता है और इसे एक तंग लूप में चलाना है। यहां से निर्देशों का पालन करते हुए और इसे अपनी आवश्यकताओं को पूरा करने के लिए संशोधित करते हुए, हम ~/Library/LaunchAgents/my-rsync.plistएक टेक्स्ट एडिटर में बनाने जा रहे हैं और सामग्री बनाते हैं:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
 "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>My Rsync</string>
    <key>Program</key>
    <string>/bin/sh</string>
    <key>ProgramArguments</key>
    <array>
        <string>sh</string>
        <string>-c</string>
        <string>while sleep 5s; /Users/my/my_rsync.sh; done</string>
    </array>
    <key>ServiceDescription</key>
    <string>Keep /my/tree synchronized with the machine sink</string>
    <key>KeepAlive</key>
    <true/>
</dict>
</plist>

कि चीजों का ध्यान रखना चाहिए।

सामान्य चेतावनी लागू होती है: मैंने इसे स्मृति से लिखा था और इसका परीक्षण नहीं किया था। तो आँख बंद करके पालन न करें। रास्ते में सावधानी से परीक्षण करें। जब भी आपको संदेह हो आप --dry-runrsync पर विकल्प का उपयोग करें । यह पता लगाएगा कि वास्तव में कुछ किए बिना उसने क्या किया होगा


2

rsyncप्रत्येक 5 सेकंड चलाने के बजाय , आप डायरेक्टरी ट्री देखने के लिए lsyncd डेमॉन का उपयोग कर सकते हैं।

यह ओएस एक्स के माध्यम से काम करता है /dev/fsevents, लेकिन मेरे पास एक प्लगइन तैयार .debफाइल नहीं है। इसे संकलित और स्थापित करने के लिए थोड़ा सा geeky है। जब तक मैं संस्करण 2.0.6 (जल्द ही) जारी करता हूं, तब तक मैं GIT प्रमुख का उपयोग करने की सलाह दूंगा, क्योंकि lsyncd 2.0.5 को कुछ ज्ञात OS X बग्स मिले।


मैंने अभी एक OSX निश्चित संस्करण जारी किया है। हर 5 सेकंड में कुछ न कुछ होने की संभावना के कारण कुछ को चलाने के लिए अलग-अलग होने के कारण, Lsyncd rsync को तभी कॉल करेगा जब कुछ हुआ हो।
axkibe

1

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

एकमात्र जोड़ यह है कि आपको परिवर्तनों की जाँच करने के लिए हर 5 सेकंड में इसे चलाने की आवश्यकता होगी। आप लॉन्च का उपयोग करके ऐसा कर सकते हैं, इस साइट पर पहले से ही एक महान उदाहरण के साथ । इस उदाहरण में ऐसा लगता है कि स्क्रिप्ट को चालू रखा गया है, और फिर 5 सेकंड सो रहा है, फिर फिर से चलाएं।

इसे इतनी बार चलाने के साथ समस्या यह है कि उपकरण को भी मतभेदों की जांच करनी होगी, और यदि 5 सेकंड में बहुत सारे बदलाव हैं, तो उन परिवर्तनों को रिकॉर्ड करने और उन्हें स्थानांतरित करने में ओवरहेड 5 सेकंड से अधिक लग सकता है।


0

Folderwatch एक Appstore केवल $ 11.99 वाणिज्यिक विकल्प है। HFS-Plus पर फ़ोल्डरवॉच सिंक (मिरर) फोल्डर वास्तविक समय में बाहरी ड्राइव और AFP फाइल सर्वर पर वॉल्यूम को स्वरूपित करता है। http://itunes.apple.com/us/app/folderwatch/id408224368?mt=12


0

मैं FolderSync (8.99 ऐप स्टोर) का उपयोग कर रहा हूं और वास्तव में इसे पसंद करता हूं। दो पैन में सिंक्रनाइज़ किए गए ब्राउज़िंग के साथ अच्छा यूआई। आपको बाद में पुनः उपयोग के लिए सिंक नौकरी बचाने की अनुमति देता है।

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