পূর্ববর্তী rsync কাজ শেষ হওয়ার জন্য অপেক্ষা করুন ron


11

আমি একটি সার্ভার থেকে অন্য সার্ভারে কিছু ডেটা ব্যাকআপ করতে rsync ব্যবহার করছি। সমস্ত ঠিকঠাক কাজ করে, তবে সেখানে কত ডেটা স্থানান্তর করতে হবে তার উপর নির্ভর করে এটি শেষ হতে আরও বেশি সময় নিতে পারে।

পূর্ববর্তী ক্রোনজব ব্যবহার শেষ করার আগে আরএসসিএনসি কমান্ড শুরু না হওয়ার বিষয়ে কোন গ্যারান্টেড উপায় আছে?

উদাহরণস্বরূপ, প্রতি ঘন্টা আমি আরএসসিএনসি কমান্ডটি চালাচ্ছি তবে এর স্থানান্তরটি সম্পন্ন হতে 1 ঘন্টারও বেশি সময় লাগে, সুতরাং পরেরটি আগেরটি শেষ হওয়ার আগেই শুরু হবে।


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

উত্তর:


11

আপনি কিছু ধরনের লকিং প্রয়োগ করতে পারেন। এটি এখনও চলছে এমন আরএসসিএনসি প্রক্রিয়াগুলির সংখ্যা মুদ্রণ করবে:

pgrep -cx rsync

এবং এটি কেবলমাত্র আরএসসিএনসি চালাবে যদি অন্য কোনও আরএসসিএনসি প্রক্রিয়া না থাকে:

pgrep -cx rsync || rsync ...

ব্যবহার -xদুর্ঘটনাক্রমে অযাচিত নামগুলি মিলানো থেকে বিরত রাখবে (উদাহরণস্বরূপ "fooba rsync hronizator" বা "not_an_ rsync _totally" - এটি ঠিক তেমন কাজ করে pgrep -c ^rsync$)


ক্ষেত্রে এটি সুস্পষ্ট না। -c নামটি হল rsync রয়েছে এমন প্রসেসের সংখ্যা গণনা করে। যদি এটি 0 না হয় তবে শেল ফলাফলটিকে সত্য (মিথ্যা নয়) হিসাবে ব্যাখ্যা করে। দি || "বা লাইনগুলি" দেখুন প্রথম আইটেমটি সত্য এবং দ্বিতীয় আইটেমটি চালাতে বিরক্ত করবেন না, আরএসসিএনসি।
ছিনতাই করুন

13

আপনি এটি করতে সহায়তা করার জন্য ফ্লক কমান্ড ব্যবহার করতে পারেন উদাহরণস্বরূপ, flock -nসম্ভবত আপনি যা চান তাই এটি কমান্ডটির তাত্ক্ষণিক ব্যর্থতার কারণ হতে পারে যদি এটি লকটি না পেয়ে থাকে যেমন।

30 * * * *  /usr/bin/flock -n /tmp/myRsyncJob.lck /path/to/your/rsyncScript 

সাধারণভাবে, / টিএমপি-তে অনুমানযোগ্য ফাইলের নামগুলি প্রায়শই রেস শর্ত এবং / টিএমপি ডিরেক্টরিতে বিস্তৃত অ্যাক্সেসের কারণে বিপজ্জনক। এই ক্ষেত্রে এটি নিরাপদ?
mc0e

এই ক্ষেত্রে একটি অনুমানযোগ্য নাম কেবল নিরাপদ নয়, এটি প্রয়োজনীয়; এটি লককে (বিশেষ্য) লক করে তোলে (ক্রিয়াপদ)। অন্য কথায়, লকটির অবস্থা নির্দিষ্ট এবং পূর্বাভাসযোগ্য নাম সহ কোনও ফাইলের অস্তিত্বের উপর নির্ভর করে is যদি ফাইলটির নামটি অনির্দেশ্য হয় বা এটি যদি গতিশীলভাবে পরিবর্তিত হয়, তবে ঝাঁকটি উদ্দেশ্যটিকে পরাভূত করে আরএসসিএনকে নিজের উপর দিয়ে চলতে দেবে। যাইহোক, আপনি আপনার উদ্বেগগুলি সহজ করতে পারেন এবং লক ফাইলটির /var/runপরিবর্তে কোথাও লক ফাইলটি রেখে কিছুটা আরও "সঠিক" হতে পারেন im
ইভান দে লা ক্রুজ

3

আপনি যদি অন্য সরঞ্জামগুলি বিবেচনা করতে ইচ্ছুক হন তবে আপনার rdiff- ব্যাকআপটিও দেখতে পারেন । এটি ব্যাকআপগুলি করতে লিবারসিঙ্ক ব্যবহার করে এবং ডেল্টা / ইনক্রিমেন্টের একটি কনফিগারযোগ্য সংখ্যক সঞ্চয় করে। এটি লকও করে যাতে নির্দিষ্ট সময়ে কেবলমাত্র একটি rdiff- ব্যাকআপ প্রক্রিয়া চলতে পারে।


আমি পাশাপাশি rdiff- ব্যাকআপ ব্যবহার করি। তবে আপনাকে এই সেটআপটিতে সাবধানতা অবলম্বন করা দরকার কারণ rdiff-ব্যাকআপটি কেবল একমাত্র rsync এর চেয়ে বেশি সময় নেয়।
মিগাব্রিয়েল

3

এখানে আমি কি করব। লক ফাইল তৈরি করতে rsync এর চারপাশে একটি মোড়ক স্ক্রিপ্ট তৈরি করুন।

script 1
- create lock file
- rsync
- remove lock file

script 2 (running later then script 1)
- check if lock file is there
    - if not run
    - if it is there wait 10 minutes in a loop. break out of lopp when the lock file is gone
- continue to run script

2
পুনরায় বুটের পরে লক ফাইলটিও সরিয়ে ফেলার বিষয়ে নিশ্চিত হন, অন্যথায় আপনি এমন প্রক্রিয়া শেষ করতে পারেন যা আর কখনও চালিত হয় না।
জন গার্ডেনিয়ার্স

2

আমার উত্তরটি মাইক যা বলেছিল তা কিছুটা একই।

স্ক্রিপ্টে, আপনার এমন কিছু দেওয়া উচিত:

  • একটি লক ফাইল তৈরি করুন
  • আপনি যখন পরের বার এটি চালাবেন তখন লক ফাইলটির অস্তিত্ব পরীক্ষা করুন।

তবে একটি গুরুত্বপূর্ণ কাজ করা উচিত যা আপনার করা উচিত। এবং এটি একটি ফাঁদ ব্যবস্থা বাস্তবায়নের জন্য।

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

আপনি এখানে যে এটি বাস্তবায়ন করতে পারেন ।

কেবল একটি ছোট জিনিস, আপনি 9 সিগন্যালটিকে আটকাতে পারবেন না, আমি বলতে চাইছি কেউ যদি করে তবে kill -9আপনি এটি ফাঁদে ফেলতে পারবেন না কারণ সেই সংকেত সরাসরি কার্নেলের সাথে যোগাযোগ করে এবং এটি ফাঁদে যাওয়ার কোনও উপায় নেই।

এছাড়াও, জনর পরামর্শ অনুসারে, আপনার সিস্টেমটি পুনরায় বুট করার সময় আপনাকে লক ফাইলটি সরিয়ে ফেলতে হবে, কেবল কোনও বাসি ফাইল বাকি নেই তা নিশ্চিত করার জন্য।

rm -f <FILE>আপনি /etc/rc.local এ একটি ছোট কমান্ড রেখে সহজেই তা করতে পারেন


1

-S (সিরিয়ালাইজ) স্যুইচ সহ অ্যানাক্রন (অ্যানাক্রোনস্টিক ক্রোন) দেখুন। সিরিয়ালাইজ নিশ্চিত করে যে পূর্ববর্তীটি এখনও চলমান থাকলে কমান্ডটি আবার কল করা হবে না।


আপনি প্রশ্নটি ভুল বুঝে থাকতে পারেন।
জন গার্ডেনিয়ার্স

আমি তাই মনে করি না. প্রশ্নটি হ'ল "পূর্ববর্তী ক্রোনজব ব্যবহার শেষ করার আগে আরএসসিএন কমান্ড শুরু না হয় তা নিশ্চিত করার কোনও গ্যারান্টেড উপায় আছে কি?" অ্যানক্রন অতিরিক্ত / বিভিন্ন কার্যকারিতা সহ ক্রোনজবস চালায়। সিরিয়ালাইজ নিশ্চিত করে যে আপনার কল করা কোনও কমান্ড আগেরটি শেষ না হওয়া পর্যন্ত শুরু হবে না।
ইনস্টল করুন মনিকা-ডোর দুহ

আমার ক্ষমা। মনে হচ্ছিল আমাকে যে প্রশ্ন ভুল ব্যাখ্যা করা।
জন গার্ডেনিয়ার্স


0

ওএসএক্সে কাজ করার জন্য আমি মিগ্রাগ্রায়েলের সমাধান পেতে পারি নি কারণ পিগ্রিপ-এর ওএসএক্স সংস্করণটিতে -c বিকল্প নেই বলে মনে হচ্ছে (আমি মনে করি এটি গণনার জন্য)। পরিবর্তে আমি নিম্নলিখিত ব্যবহার:

[ $(pgrep ping | wc -l) -eq 0 ] && ping multiplay.co.uk || echo "Sorry, ping already in progress"

উদাহরণস্বরূপ কমান্ড হিসাবে আমি পিং ব্যবহার করেছি।

আশাকরি এটা সাহায্য করবে.

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