আমি কীভাবে একাধিক সার্ভার থেকে আমার স্থানীয় সিস্টেমে একটি ফাইল অনুলিপি করব?


11

আমাদের অ্যাপ্লিকেশনগুলিতে অ্যাপ্লিকেশন, অ্যাপ01 এবং এর মতো সার্ভারে একাধিক স্থাপনা রয়েছে। আমাকে এই সমস্ত সার্ভার থেকে আমার স্থানীয় ম্যাকের উপর একটি একক লগ ফাইল অনুলিপি করতে হবে যাতে আমি কিছু গ্রেপিং এবং কাটিয়া সম্পাদন করতে পারি।

আমি এই ফাইলটি দেখার জন্য csshX ব্যবহার করেছি তবে আমি scp এর সমতুল্য পাই না। আমি মূলত দুটি জিনিস চাই:

  1. এই জাতীয় সার্ভারের n নম্বরে সংযোগ স্থাপন এবং ফাইলটি অনুলিপি করার ক্ষমতা
  2. স্থানীয়ভাবে সংঘাত নামকরণ এড়াতে সম্ভবত সার্ভার হোস্টনামের সাথে লগ ফাইলের উপসর্গ রেখে

আমি এটা কিভাবে করবো?


1
আমি সম্ভবত এটির জন্য একটি স্ক্রিপ্ট লিখব। এটি কি কোনও বিকল্প নয়?
বার্নহার্ড

আমি এখনই এটি করছি বার্নহার্ড। :) আমি কেবল আশা করছিলাম যে এর জন্যও সিএসএইচএক্স এর মতো কিছু ছিল।
গৌরব

উত্তর:


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_fileYou আপনি স্পষ্টতই নামগুলি যা চান তা পরিবর্তন করতে পারেন।


3
রাখুন &শেষে scpকমান্ড ও waitশেষে, এবং আপনি কোন অতিরিক্ত খরচ সম্পাতবিন্দু আছে।
l0b0

3
@ l0b0 আমি জানি না এটি পছন্দ হয়েছে কিনা। আমি এই পদ্ধতির পছন্দ করি কারণ আমি জানতে পারি যে কোনটি এবং কোন ফাইলগুলি অনুলিপি করতে ব্যর্থ হয়েছিল। ধন্যবাদ ভাল, যদিও।
terdon

12

জিএনইউ সমান্তরাল ব্যবহার করুন :

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

যেগুলি ব্যবহার করে এমন সমাধানগুলির বিপরীতে for, এটি সমস্ত ডাউনলোড সমান্তরালে চালাবে run


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"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.