আমি কীভাবে ফাইল সংশোধন করতে rsync ট্রিগার করব?


18

আমি সহ ফোল্ডারের সিঙ্ক করতে পারে rsync -avz /directory /target, এখন আমি একটি ফাইল পরিবর্তিত এটা করতে ইচ্ছুক /directory, যাতে rsyncস্বয়ংক্রিয়ভাবে বলা উচিত।

আমি ভার্চুয়াল বক্স ব্যবহার করছি এবং ভার্চুয়াল বক্সের ভাগ করা ফোল্ডারটি সত্যিই ধীর, বিশেষত আপনার যদি এমন কোনও ওয়েবপৃষ্ঠা রয়েছে যা ভাগ করা ফোল্ডারটিকে নথি রুট হিসাবে ব্যবহার করছে। এর সাথে rsyncআমি ভাগ করে নেওয়া ফোল্ডারে আমার স্থানীয় ফাইলগুলির সাথে কাজ করতে সক্ষম হব এবং নথির মূলের সাথে এটি স্বয়ংক্রিয়ভাবে সিঙ্ক করব।

আমি আশা করি যে এটি করার জন্য কারও কাছে ধারণা আছে, crontabভাল হবে না, কারণ এটি প্রতিটি এক্স মিনিটে কার্যকর করা হয়, তাই আমি যদি কিছু না করি তবে এটি কল করবে rsyncতবে আমি আমার ফাইলটি পরিবর্তন করেছি কিনা।

শুভেচ্ছান্তে

উত্তর:


18

ক্রন্টব ভাল হবে না, কারণ এটি প্রতিটি এক্স সেকেন্ড / মিনিটে কার্যকর করা হয়, সুতরাং আমি যদি কিছু না করি তবে এটি আরএসসিএন কল করবে তবে আমি আমার ফাইলটি পরিবর্তন করেছি কিনা

rsyncপরিবর্তন করা ফাইলগুলি কেবল সিঙ্ক করবে। যদি কিছু পরিবর্তন না হয় তবে এটি প্রস্থান করবে। এটি সত্যিই একটি ন্যূনতম ওভারহেড।

আপনি যদি এতে ব্যবহার করতে পারতেন তাতে সন্তুষ্ট হন inotifywait:

while inotifywait -r /directory/*; do
    rsync -avz /directory /target
done

এটি আরও তাত্ক্ষণিক হবে তবে প্রতিবার আপনি সংরক্ষণ করার সময় এটি কাজ করবে ।


1
সমস্যাটি দেখে মনে হচ্ছে যে, অযৌক্তিকভাবে ভাগ করা এনএফএস ফোল্ডারগুলি চেক করতে সক্ষম নয়। এটি নিশ্চিত করার জন্য, আমি যা চাই তা বর্ণনা করার চেষ্টা করছি আমার কাছে ভার্চুয়াল বাক্সটি যোগ্রান্টের সাথে ইনস্টল করা আছে, সেখানে আমার একটি ভাগ করা ফোল্ডার রয়েছে "প্রকল্পগুলি" এটি বুটে মাউন্ট করা আছে, আমার সমস্ত ওয়েবসারভার ফাইলগুলি সেখানে অবস্থিত তাই আমি তাদের আমার হোস্টে সংশোধন করতে পারি সিস্টেম (উইন)) হিসাবে আমি ভার্চুয়াল বক্সকে বলেছি যে ভাগ করা ফোল্ডারগুলি সত্যই ধীর গতির, তাই মাউন্ট করা এনএফএস ফোল্ডারটিকে অন্য জায়গায় যেমন / var / www তে সিঙ্ক করার সমাধান হতে পারে তবে সাধারণ উপায়গুলি কাজ করছে না, আমি ফাইলস্যাঞ্জেড, আইক্রন্টব, গেউস গ্যামিন চেষ্টা করেছি ফ্যাম সাহায্য করবে, তবে সেগুলি কীভাবে শুরু করতে বা ব্যবহার করতে হয় তা আমি জানি না
ব্ল্যাকস্কর্প

@ ব্ল্যাকস্কর্প বাস্তবসম্মতভাবে আপনি কেবল আরএসএনসি ক্রোন করে আটকে আছেন এবং কী সিঙ্কের প্রয়োজন তা সিদ্ধান্ত নিতে দিচ্ছেন। আমি উত্তর হিসাবে নেতৃত্ব হিসাবে, এটি একটি ভয়াবহ খারাপ বিকল্প নয়।
অলি

1
অন্য বিকল্পটি দূরবর্তী অবস্থান থেকে পরিবর্তনগুলি সনাক্ত করার পরিবর্তে হোস্ট থেকে ফাইলগুলি ধাক্কা দেওয়া push
অলি

ভাল এই সমাধানটি আমি আগে ব্যবহার করেছি, এটিতে 2 টি সমস্যা রয়েছে: 1) ফাইলগুলি সম্পাদনা করার জন্য আমাকে প্রতিবার আমার ভার্চুয়াল বাক্সে পুনঃসংযোগ করতে হয়েছিল, যার অর্থ, আমার ভার্চুয়ালটি চলতে হবে, দ্রুত সম্পাদনা আর কাজ করছে না 2) আমি জানি না কেন, তবে কারণ আমার আইডিই (নেটবিন্স) সাম্বার প্রকল্প স্ক্যানিং প্রক্রিয়াটি দেখায় 99% সিপিইউ ব্যবহার এবং ভার্চুয়াল বাক্সের মধ্যে সমস্ত কিছু ধীর গতিতে বিকাশকালে আমি আরএসএন + ক্রোনজব সলিউশন বা ওয়েবসার্ভারে পিএইচপি বিল্ড চেষ্টা করব
ব্ল্যাকস্কর্প

inotifywaitসমাধান এক সামান্য কিন্তু গুরুত্বপূর্ণ অপূর্ণতা আছে: এটা পরিবর্তন যা ঘটেছিল শনাক্ত করতে পারছে না rsyncচলছে। নিম্নলিখিত পরিস্থিতি বিবেচনা করুন: ফাইল এ পরিবর্তন করা হয়েছে; rsync ট্রিগার করা হয়; যখন rsync ফাইল এ সিঙ্ক্রোনাইজ প্রায় শেষ হয় , ফাইল বি পরিবর্তন করা হয় changed এখন, rsyncসমাপ্ত এবং inotifywaitচলছে, তবে ফাইল বি সিঙ্ক্রোনাইজ করা হয়নি এবং পরবর্তী কোনও পরিবর্তন হওয়া পর্যন্ত সিঙ্ক্রোনাইজ হবে না। @ অ্যারজিওন দ্বারা প্রস্তাবিত হিসাবে ব্যবহার বিবেচনা করুনlsyncd
মারসফট

6

আপনি Lsyncd (লাইভ সিঙ্কিং ডেমন) ব্যবহার করতে পারেন :

Lsyncd একটি স্থানীয় ডিরেক্টরি ট্রি ইভেন্ট ইভেন্ট মনিটরের ইন্টারফেস (ইনোটাইফাই বা ফিসেভেন্টস) দেখে। এটি কয়েক সেকেন্ডের জন্য ইভেন্টগুলি একত্রিত করে এবং তারপরে পরিবর্তনগুলি সিঙ্ক্রোনাইজ করার জন্য একটি (বা আরও) প্রক্রিয়া (এস) তৈরি করে। ডিফল্টরূপে এটি rsync। Lsyncd হ'ল একটি হালকা ওজনযুক্ত লাইভ মিরর সমাধান যা নতুন ফাইল সিস্টেম বা ব্লক ডিভাইসের প্রয়োজন হয় না এবং স্থানীয় ফাইল সিস্টেমের কার্যকারিতা ব্যাহত করে না ইনস্টল করা তুলনামূলক সহজ।

এখানে উদাহরণস্বরূপ উবুন্টু 16.04 এর একটি টিউটোরিয়াল


2

আপনি ব্যবহার করতে পারেন inotifywaitএবং rsyncinotifywaitইভেন্ট modify,create,deleteসক্ষম সঙ্গে। এইভাবে আপনি কেবল ফাইলটি পরিবর্তিত হলেই আপনার সার্ভারের সাথে সিঙ্ক্রোনাইজ করবেন, অন্যথায় এটি যখনই ফাইল পড়বে তখন এটি সিঙ্ক হবে (কোনও পরিবর্তন আছে কিনা তা পরীক্ষা করার জন্য সম্পাদকরা আপনার ফাইলটি কয়েকবার পড়বেন)। এইভাবে বলেছেন:

while inotifywait -r -e modify,create,delete /directory; do
    rsync -avz /directory /target
done

Rsync চলাকালীন এটি পরিবর্তনগুলি সনাক্ত করতে পারে না। lsyncd@ অ্যারজিওন দ্বারা প্রস্তাবিত হিসাবে ব্যবহার বিবেচনা করুন ।
মারসফট

এটি প্রতিটি পরিবর্তনের পরে সমস্ত ফাইলগুলিতে সমস্ত ইভেন্ট পুনরায় প্রয়োগ করবে ... এবং এটি প্রয়োগ করার পরে সেই সময়ের কোনও পরিবর্তন দেখা যাবে না ...
কেউ

0

গৃহীত উত্তরের পরিবর্তিত ফাইলগুলির ট্রিগার করতে fswatch ব্যবহার করে সাফল্য পেয়েছি বলে গৃহীত উত্তরের মন্তব্যে কিছুটা প্রসারিত করা scp। লিনাক্সে inotifyএটি চারপাশের একটি মোড়ক তবে এটি ক্রস প্ল্যাটফর্ম (আমি একটি আর্ম-ভিত্তিক কিউইএমইউ গেস্ট সহ একটি ম্যাকে আছি)। আমি sshদূরবর্তী বিল্ডটিও টেক করেছি । পুশ অ্যাপ্রোচ এমন শেয়ারের সাথে ভাল কাজ করে যা আদর্শ উপায়ে কম আচরণ করে।

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