ভাঙা সংযোগের পরে এসএসএইচ দিয়ে আরএসসিএন আবার চালু করবেন?


45

আমাকে আরএসইএনসি ব্যবহার করে প্রচুর পরিমাণে ডেটা (> 80 জিবি) স্থানান্তর করতে হবে। সবকিছু ঠিকঠাক চলছে, তবে ডিএসএল সংযোগটি যেখানে থেকে ব্যাকআপ ডেটা প্রেরণ করা হয় তা প্রতি 24 ঘন্টা একবার 3 মিনিটের জন্য নেমে যায় (সরবরাহকারীদের স্যুইচ করা কোনও বিকল্প নয়)।

আমি কিভাবে করবো:

  1. সংযোগটি ব্যাক আপ হয়ে গেলে স্বয়ংক্রিয়ভাবে স্থানান্তর পুনরায় চালু করবেন?

  2. নিশ্চিত হয়ে নিন যে দুর্ঘটনাক্রমে দুটি আরসিএনসি কমান্ড একই সময়ে চলছে না?


আপনি কি রিটার্ন কোডটি পরীক্ষা করতে পারবেন না? সাফল্যে ফিরে while ./run_script; do echo "Retrying..."; done; echo "Done."আসুন নিশ্চিত করুন । run_script0
কেরেক এসবি


এখানে কিছু দরকারী তথ্য - আমি কেবল এটি যুক্ত করতে চাই যে পাসওয়ার্ড সমস্যার জন্য বারবার জিজ্ঞাসা করার জন্য একটি উপায় হ'ল 'sshpass' কমান্ডটি ব্যবহার করা। সাধারণত এটি
রাচেল সান্ডার্স

উত্তর:


52

নিম্নলিখিতগুলি সহায়ক হওয়া উচিত:

#!/bin/bash

while [ 1 ]
do
    rsync -avz --partial source dest
    if [ "$?" = "0" ] ; then
        echo "rsync completed normally"
        exit
    else
        echo "Rsync failure. Backing off and retrying..."
        sleep 180
    fi
done

সংযোগটি মারা যাওয়ার পরে, আরএসএনসি একটি অ-শূন্য প্রস্থান কোড সহ প্রস্থান করবে। এই স্ক্রিপ্টটি সহজভাবে পুনরায় চলমান আরএসসিএনকে রাখে, সিঙ্ক্রোনাইজেশন স্বাভাবিকভাবে সম্পূর্ণ না হওয়া পর্যন্ত এটি চালিয়ে যেতে দেয়।


1
ধন্যবাদ, আমি এখন এটি চেষ্টা করছি ... তবে এটি কি করা উচিত: যদি ["$"? = "0"] হবেনা: যদি ["$?" == "0"] (তুলনা অপারেটর)?

1
না, বাশে "=" হ'ল সমতা (অনেকগুলি বিষয় যা এটিকে বিভ্রান্তিকর করে তোলে, আমি মনে করি!)
পিটার

6
== এর জন্য উপনাম =: ডি
বিবাজা 42

8
আহ, জেনে রাখা ভাল। বাশ কখনই আমাকে বিস্মিত / আতঙ্কিত করতে থামবে না :
পি

2
পার্টিতে দেরীতে, তবে উত্তরোত্তর জন্য: ক) স্রেফ ব্যবহার করুন: যদি rsync -avz - পার্টিশিয়াল সোর্স ডেস্ট; তারপরে ... খ) আপনি অঙ্কিত বিস্তারের জন্য ডাবল প্রথম বন্ধনী ব্যবহার করে যদি অবিচ্ছেদ্য মানগুলির তুলনা করতে চান: যদি (($? = 0));
ব্যবহারকারী 18402

7

এটি পিটারের উত্তরের মতোই একই কাজ করে তবে ব্যবহারকারীকে তিনি যে রিমোট ফাইলটি চান সেটির বিকল্প দেয় এবং কোথায় সে এটি সংরক্ষণ করতে চায় (পাশাপাশি এসএসএসের মাধ্যমে আরএসআইএনসি পরিচালনা করে)। আপনার ব্যবহারকারী নাম এবং হোস্ট যথাক্রমে USER এবং HOST প্রতিস্থাপন করুন।

#! / বিন / ব্যাশ
প্রতিধ্বনি-e "দয়া করে পূর্ণ (পলাতক) ফাইলের পথটি প্রবেশ করুন:"
পড়ুন -r পথ
প্রতিধ্বনি "পথ: $ পথ"
প্রতিধ্বনি -e "গন্তব্য প্রবেশ করান:"
পড়ুন-ডিএসটি
প্রতিধ্বনি "গন্তব্য: st dst"
[1] যখন
করা
    rsync --progress - পার্টিশিয়াল --append -vz -e ssh "ইউজার @ হোস্ট: $ পথ" $ ডিএসটি
    যদি ["$?" = "0"]; তারপর
        প্রতিধ্বনি "আরএসসিএনসি সাধারণত সম্পন্ন হয়েছে"
        প্রস্থান
    আর
        প্রতিধ্বনি "আরএসএনসি ব্যর্থতা। এক মিনিটের মধ্যে আবার চেষ্টা করা হচ্ছে ..."
        ঘুম 60
    ফাই
সম্পন্ন

এখানে ব্যবহৃত আরএসসিএনসি বিকল্পগুলি স্থানান্তরকালে অগ্রগতির পরিসংখ্যান, অপ্রত্যাশিত ব্যর্থতার পরে আংশিক ফাইল সংরক্ষণ এবং পুনরায় শুরু হওয়ার পরে আংশিকভাবে সম্পন্ন ফাইলগুলিতে সংযোজন করার ক্ষমতা সক্ষম করে। -V বিকল্পটি ভারবোসিটি বাড়ায়, -z বিকল্পটি সংক্ষেপণ সক্ষম করে (ধীরে সংযোগের জন্য ভাল তবে উভয় প্রান্তে আরও বেশি সিপিইউ শক্তি প্রয়োজন), এবং -e বিকল্পটি আমাদের এসএসএসের মাধ্যমে এই স্থানান্তর পরিচালনা করতে সক্ষম করে (এনক্রিপশন সবসময় ভাল)।

দ্রষ্টব্য: আপনার এসএসএসের সাহায্যে যদি আপনার পাবলিক কী লগইন সক্ষম থাকে তবে এটি ব্যবহার করুন, অন্যথায় এটি পুনরায় চালু হওয়ার সময় আপনাকে পাসওয়ার্ডের জন্য জিজ্ঞাসা করবে (স্ক্রিপ্টের সমস্ত কার্যকারিতা হ্রাস করে)।


1
এটিই মূল প্রশ্নের সেরা উত্তর। এটি এখানে ভুল উত্তর সহ একটি নকলের
রিকফুসুসা

5

সুপারভাইজার ডিমন (একটি প্রক্রিয়া নিয়ন্ত্রণ ব্যবস্থাপক) উভয় পক্ষের আরএসএ শংসাপত্রগুলি তৈরি করার পরে খুব ভালভাবে কাজ করতে পারে, একইভাবে একটি কনফিগারেশন রয়েছে:

[program:rsync-remoteserver]
command=rsync -avz --progress root@server.com:/destination /backup-path
stdout_logfile=/out-log-path  
stderr_logfile=/errlogpath

1

@ পিটারের উত্তরটি খুব কার্যকর বলে মনে হচ্ছে, তবে আমার পক্ষে --updateবিকল্পটি ব্যবহার করা গুরুত্বপূর্ণ ছিল । সংযোগটি পুনরায় চালু হওয়ার পরে, --updateআরএসসিএন ছাড়াই খুব শুরু থেকেই সমস্ত সিঙ্ক করার চেষ্টা করছিল। এর সাথে --update, ইতিমধ্যে বিদ্যমান ফাইলগুলি এড়িয়ে গেছে।

rsync --partial --update --progress -r [SOURCE] [DESTINATION]


2
--updateইতিমধ্যে বিদ্যমান ফাইলগুলি এড়িয়ে চলে ... সম্পূর্ণরূপে লক্ষ্যে অনুলিপি করা হয়নি এমনগুলি সহ। আমি মনে করি এটি বেশিরভাগ ব্যবহারের ক্ষেত্রে যায়।
দুরুম

@ ডুরুম এটি কমপক্ষে rsync 3.1.2 এ সত্য নয়। বাধা স্থানান্তরের পরে আমি দেখতে পাই এটি একই ফাইলে সঠিকভাবে কাজ করে। আমি ssh এর উপর আরএসএনসি ব্যবহার করেছি, কমান্ডটি ছিল rsync --partial --update file1 remotehost:file1। 15% স্থানান্তর করার পরে আমি স্থানান্তরটি ভেঙে ফেলেছি (কিল-কিল)।
ফিলিপ্রেম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.