मैं अपने स्थानीय सिस्टम में कई सर्वरों से एक फ़ाइल की प्रतिलिपि कैसे बना सकता हूं?


11

हमारे पास सर्वर पर एप्लिकेशन की एक से अधिक तैनाती है जैसे कि ऐप्पल, ऐप 01 और इतने पर। मुझे अपने स्थानीय मैक पर इन सभी सर्वरों से एकल लॉग फ़ाइल की प्रतिलिपि बनाने की आवश्यकता है ताकि मैं कुछ ग्रेपिंग और कटिंग कर सकूं।

मैंने इस फ़ाइल को देखने के लिए csshX का उपयोग किया है लेकिन मुझे scp के लिए कोई समकक्ष नहीं मिला। मुझे मूल रूप से दो चीजें चाहिए:

  1. ऐसे सर्वरों के एन नंबरों से जुड़ने और फाइल को कॉपी करने की क्षमता
  2. सर्वर होस्टनाम के साथ लॉग फ़ाइल को प्रीफ़िक्स करके स्थानीय रूप से संभवतः नामकरण के विवाद से बचें

मैं यह कैसे करु?


1
मैं शायद इसके लिए खुद एक स्क्रिप्ट लिखूंगा। क्या वह विकल्प नहीं है?
बर्नहार्ड

मैं बर्नहार्ड अभी कर रहा हूँ। :) मैं बस उम्मीद कर रहा था कि इसके लिए भी कुछ-कुछ csshX जैसा था।
गौरव

जवाबों:


18

यह थोड़ा स्क्रिप्ट के साथ करने के लिए तुच्छ है। उदाहरण के लिए:

for server in app0 app1 app4 app5 appN; do
    scp user@$server:/path/to/log/file /local/path/to/"$server"_file
done

उपरोक्त प्रत्येक सर्वर से फ़ाइल को क्रमिक रूप से कॉपी करेगा और नाम देगा SERVERNAME_file। तो, फ़ाइल से app0होगा app0_fileआदि आप स्पष्ट रूप से नामों को बदल सकते हैं जो आप चाहते हैं।


3
कमांड &के अंत में और अंत में रखो , और आपके पास बिना किसी अतिरिक्त लागत के समवर्ती है। scpwait
l0b0

3
@ l0b0 मुझे नहीं पता कि अगर वह वांछित है। मुझे यह दृष्टिकोण पसंद है क्योंकि मुझे पता चल सकता है कि क्या और कौन सी फाइलें कॉपी करने में विफल रहीं। अच्छा टिप हालांकि, धन्यवाद।
terdon

12

GNU समानांतर का उपयोग करें :

parallel -j0 scp {}:/remote_path file_from_{} ::: host1 host2 host3 # and so on

समाधान है कि एक का उपयोग करने के विपरीत for, यह सभी डाउनलोड समानांतर में चलेगा


5
remote_path="/path/to/file"
local_target_dir="/path/to/dir"
hosts=(app00 app01)
for host in "${hosts[@]}"; do
    scp "$host":"$remote_path" "$local_target_dir"/filename."$host"
done

बहुत बहुत धन्यवाद, मैं प्रोग्रामिंग को कोसने के लिए नया हूं और ऐसा कुछ लिखा है, बस बहुत गंदा। :)
गौरव

0

यदि आप अजगर का उपयोग करने में सक्षम हैं, तो एक दिलचस्प मॉड्यूल है जो मशीन प्रशासन-ईश कार्यों को आसान बनाने के लिए दिखता है जिसे कपड़े कहा जाता है: http://docs.fabfile.org/en/latest/tutorial.html

मैं इसका उपयोग करना चाहता हूं, लेकिन इसके आसपास भी नहीं मिला है


0

इसने मेरे लिए काम किया

#!/bin/bash
#Expect script
/usr/bin/expect -<<EOD 

set SERVERS {1 2 3 .. N}

foreach SERVER \$SERVERS {
    spawn scp user@\$SERVER:remote local/"\$SERVER"RESWeb.log
    expect {
      -re ".*es.*o.*" {
        exp_send "yes\r"
        exp_continue
      }
      -re ".*sword.*" {
        exp_send "pswrd\r"
      }
    }
    expect eof 
}
EOD

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