2012-03-19 6 views
5

हम नियमित रूप से रिमोट फ़िशिकल साइट्स पर इंटरैक्टिव कियोस्क सीपीयू को तैनात करते हैं, और मैंने एक सामग्री अद्यतनकर्ता एप्लिकेशन विकसित किया है जो प्रत्येक कियोस्क (विंडोज 7 प्रो) के बीच मीडिया संपत्तियों की रात की सिंक करता है और एक होस्टेड सीएमएस (वर्चुअलाइज्ड उबंटू सर्वर linode.com पर चल रहा है)। सामग्री अद्यतनकर्ता सी #/.NET में लिखा गया है, और यह Process.Start() का उपयोग कर एक बच्चे यूनिसन प्रक्रिया को जन्म देता है। यूनिसेन को एक निजी कुंजी का उपयोग कर एसएसएच के माध्यम से रिमोट सर्वर से कनेक्ट करने के लिए कॉन्फ़िगर किया गया है।विंडोज/लिनक्स के बीच यूनिसेन सिंक स्थानांतरण के दौरान यादृच्छिक रूप से लटकता है

हम जिस मुद्दे पर हमला कर रहे हैं वह यह है कि जब ContentUpdater.exe से बाल प्रक्रिया के रूप में उत्पन्न होता है, तो यूनिसन अक्सर स्थानांतरण के दौरान रिमोट सर्वर से संचार करना बंद कर देगा और अनिश्चित काल तक लटकाएगा। कोई साधारण repro नहीं है - कभी-कभी यह काम करता है, अक्सर यह लटका नहीं है। यह बड़े अपडेट (400 एमबी +) पर अधिक नाजुक प्रतीत होता है लेकिन यह किसी और चीज की तुलना में अधिक अनुमान है। जब यह लटकता है, क्लाइंट (विंडोज 7) पर यूनिसन प्रक्रिया अभी भी 25% सीपीयू उपयोग दिखा रही है, और सर्वर भी एकजुट प्रक्रिया को दिखाता है - बस कोई नेटवर्क गतिविधि नहीं है। मुझे पता है कि यह कनेक्ट हो रहा है, क्योंकि यह हमेशा प्रक्रिया शुरू करता है और स्थानांतरण के माध्यम से भाग लेता है, लेकिन यह दो बार एक ही स्थान पर कभी नहीं लटकता है। मैं यूनिसेन-2.40.63.exe का मूल विंडोज बाइनरी बिल्ड चला रहा हूं, और रिमोट सर्वर पर एकजुट का एक ही संस्करण चला रहा हूं।

विंडोज पर यूनिसन कमांड लाइन लगता है:

Unison-2.40.63.exe -contactquietly -silent -batch -sshcmd "C:\KioskManagement\Apps\ssh2plink.bat" -sshargs "-p 22 -i C:\cygwin\home\someuser\.ssh\contentupdater-rsync-key.ppk" -ignore "Path {innovations,todaytomorrow,scale,mooreslaw,brilliantminds,askafab}" ssh://[email protected]//home/cms/base-preview/webapps/ROOT/applications C:\kioskdir\temp\applications -force ssh://[email protected]//home/cms/base-preview/webapps/ROOT/applications 

रिकॉर्ड के लिए, मैं मूल रूप से सामग्री अपडेटर लेखक था (cygwin के माध्यम से Windows पर) rsync उपयोग करने के लिए, लेकिन एक ही मुद्दों मार दिया गया था। यह देखने के लिए कि क्या एसएसएच परिवहन समस्या का हिस्सा था, मैं tried using rsync in server mode (rsyncd) लेकिन लटकाना अपने सिर को पीछे छोड़ना जारी रखता था।

इस बिंदु पर, मैं पूरी तरह से स्टंप हो गया हूं। मुद्दा अन्य सर्वरों पर भी repros, इसलिए मैं सोच रहा हूँ कि यह चीजों के विंडोज पक्ष पर है। मैं यह भी मानने के इच्छुक हूं कि समस्या तब होती है जब प्रक्रिया किसी अन्य प्रक्रिया के अंदर Process.Start() से यूनिसन/rsync को कॉल करते हैं (अद्यतन: मुझे कमांड लाइन से चलते समय इसे फिर से लिखना पड़ता है) - ऐसा प्रतीत नहीं होता है कमांड लाइन से सीधे चलते समय असफल हो जाते हैं। यूनिसन/rsync भी कभी भी त्रुटि नहीं करता है, इसलिए जांचने के लिए कोई लॉगफाइल नहीं है (जब तक कि किसी को रिमोट सर्वर पर सर्वर-साइड ट्रेस या लॉगफाइल के बारे में पता नहीं है - पूर्ण प्रकटीकरण: मैं एक फ्रीबीएसडी गीक हूं, और जानता हूं हुड के नीचे उबंटू के बारे में कीमती छोटी)।

किसी भी और सभी अंतर्दृष्टि/विचार/समाधान के लिए अग्रिम धन्यवाद!

सर्वश्रेष्ठ

उत्तर

1

बस चिमिंग; मुझे दो विंडोज 7 कंप्यूटरों के बीच rsync/cygwin का उपयोग कर एक ही समस्या है। नेट पर पुरानी चर्चाओं ने सुझाव दिया कि समस्या केवल एसएसएच कनेक्शन को प्रभावित करती है, लेकिन rsync डिमन विधि मेरे लिए विफल हो जाती है। ऐसे संदेश हैं जो दिखाते हैं कि किसी को hsE_SOCKETPAIR को अनसेट करने वाले स्रोत से rsync को पुन: संकलित करना चाहिए, जिसे rsync/ssh काम करने के लिए कहा जाता है। मैं कोशिश करने के लिए चारों ओर नहीं मिला है।

+0

यह एक उत्तर नहीं प्रतीत होता है। –

6

मुझे यह समस्या थी। इसे हल करने के लिए मुझे कई दिन लगे। ने कहा कि -फल्डेप्लेक्स ने मेरी समस्या हल की।

के रूप में दस्तावेज में कहा गया है:

halfduplex इस ध्वज को सही पर सेट किया जाता है, यूनिसन नेटवर्क संचार हाफ डुप्लेक्स (क्लाइंट और सर्वर एक साथ डेटा फेंकना कभी नहीं) होने के लिए मजबूर किया जाता है। यदि आप अपने नेटवर्क लिंक के साथ अस्थिरता का अनुभव करते हैं, तो इससे मदद मिल सकती है। यूनिसेन वर्तमान कार्यान्वयन की सीमा के कारण विंडोज मशीन के साथ सिंक्रनाइज़ करते समय संचार हमेशा अर्ध-डुप्लेक्स होता है जिसके परिणामस्वरूप डेडलॉक हो सकता है।

मेरे मामले में, मैं विंडोज/ओएसएक्स के बीच समन्वयित कर रहा था।

3

मैं पुष्टि करता हूं कि "halfduplex = true" सेटिंग ने मेरे लटकते मुद्दों को हल किया है। मैंने Win7 और OSX "क्लाइंट" और लिनक्स सर्वर को केंद्रीय सिंकिंग पॉइंट के रूप में सेटअप किया था। सर्वर के साथ सभी क्लाइंट सिंक।

समस्याएं तब शुरू हुईं जब मैंने मैक क्लाइंट को चित्र में पेश किया था, तब से दोनों दिशाओं के साथ अपडेट होने लगे। यूनिसन प्रोफाइल में "halfduplex = true" को सेट करने से मेरी समस्या हल हो गई।

आश्चर्यजनक रूप से पर्याप्त, यूनिसन ने दो विन 7 क्लाइंट्स और लिनक्स सर्वर के बीच एक बहुत छोटी निर्देशिका को सिंक किया, लेकिन फाइलें उस मामले में बहुत छोटी हैं।

संबंधित मुद्दे