rsync অবশ্যই এই কাজের জন্য সঠিক সরঞ্জাম। ডিরেক্টরিগুলি সিঙ্কে রাখার জন্য এটি বিদ্যমান এবং এটি মোটামুটি স্মার্টগুলির সাথে এটি করতে পারে। উদাহরণস্বরূপ: এটি যখনই পারে কেবলমাত্র ডেল্টা স্থানান্তর করবে এবং এটি এসএসএস টানেলের মাধ্যমে কাজ করতে পারে।
ধরা যাক আপনার কাছে এমন একটি মেশিন উত্স রয়েছে যা ডিরেক্টরি গাছ /my/tree
এবং মেশিন সিঙ্কের আপনার লাইভ সংস্করণটিকে হোস্ট করে যা আপনি এটির সাথে সংলগ্ন রাখতে চান। আপনি একটি SSH অ্যাকাউন্ট ছিল বেসিনে আপনি করতে পারে, থেকে উৎস নিম্নরূপ ব্যবহার rsync:
rsync -avz --delete -e ssh /my/tree/ remoteuser@sink:/my/tree
এটি ধরে নেওয়া হয় যে আপনি উত্সের মতো /my/tree
এটি ডোবার ঠিক একই জায়গায় চান । অবশ্যই, আপনার এটি ঠিক একই জায়গায় রাখার দরকার নেই।
কমান্ড লাইন ভেঙে:
-avz
: সংরক্ষণাগার মোড, ভারবোজ আউট, স্থানান্তর করার সময় সংক্ষেপণ ব্যবহার করুন
--delete
: চালু ফাইল মুছে দিন সিঙ্ক যে উপস্থিত না উৎস
-e ssh
: সংযোগ পদ্ধতি হিসাবে ssh ব্যবহার করুন
এই কলটি অবশ্যই যখন আপনি এটি তৈরি করবেন তখন আপনাকে আপনার পাসওয়ার্ডের জন্য জিজ্ঞাসা করবে। আপনি যদি কিছু স্বয়ংক্রিয় ফ্যাশনে এটি করতে চান তবে আপনাকে মেশিনে থাকা অ্যাকাউন্টগুলির মধ্যে কিছু কী ভাগ করতে হবে এবং এসএসএস সংযোগ করার জন্য সরকারী-বেসরকারী কী এনক্রিপশন ব্যবহার করতে হবে।
এই rysnc এর জন্য আপনার কী জুটি সেট আপ করতে আপনার উত্স মেশিনে নিম্নলিখিত কমান্ডটি চালান :
> ssh-keygen -t rsa -b 2048 -f ~/.ssh/my-rsync-key
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): [press enter here]
Enter same passphrase again: [press enter here]
Your identification has been saved in ~/.ssh/my-rsync-key.
Your public key has been saved in ~/.ssh/my-rsync-key.pub.
The key fingerprint is:
2e:28:d9:ec:85:21:e7:ff:73:df:2e:07:78:f0:d0:a0 root@source
> chmod 600 ~/.ssh/my-rsync-key
এই কী-পেয়ারটি কাজ করার জন্য আমাদের সিঙ্ক মেশিনে ~/.ssh/my-rsync-key.pub
থাকা ~<remoteuser>/.ssh/authorized_keys
ফাইলের সামগ্রীগুলি যুক্ত করতে হবে ।
প্রথমে সিঙ্ক মেশিনে ফাইলটি অনুলিপি করুন :
scp ~/.ssh/my-rsync-key.pub remoteuser@sink:~
তারপরে সিঙ্ক মেশিনে এসএসএস করুন এবং মেশিনে নিম্নোক্ত ব্যবহারকারী হিসাবে নিম্নলিখিতটি চালিয়ে কীটি আমদানি করুন :
> if [ ! -d ~/.ssh ]; then mkdir ~/.ssh ; chmod 700 ~/.ssh ; fi
cd ~/.ssh/
if [ ! -f authorized_keys ]; then touch authorized_keys ; chmod 600 authorized_keys ; fi
cat ~/my-rsync-key.pub >> authorized_keys
rm ~/my-rsync-key.pub
আপনার উত্স এবং সিঙ্ক মেশিনগুলির মধ্যে এসএসএস সংযোগটি লক করার বিষয়ে অতিরিক্ত টিপসের জন্য আমি এই পৃষ্ঠাটি একবার দেখার পরামর্শ দিই ।
আপনার উত্স মেশিন থেকে আপনি পরীক্ষা করতে পারেন যে এই সেটআপটি চালিয়ে কাজ করে:
rsync -avz --dry-run -e "ssh -i ~/.ssh/my-rsync-key" /my/tree/ remoteuser@sink:/my/tree
এটি একটি rsync এর শুকনো রান করবে। আপনি যদি rsync কমান্ডটি ফাইলগুলি সংযুক্ত করে এবং তুলনা করতে দেখেন তবে আপনি জানেন যে জিনিসগুলি সঠিকভাবে সেটআপ করা আছে।
এই সাইটে এই সহায়কটির উত্তর হিসাবে প্রদর্শিত একটি LaunchD কনফিগারেশন ফাইল থেকে এই rsync কমান্ড কল করার এখন আমাদের একটি সহজ উপায় প্রয়োজন । যেহেতু আপনি চান এই কলটি একটি দৃop় লুপে ঘটুক, আপনাকে অবশ্যই নিশ্চিত করতে হবে যে আপনার কাছে একই সময়ে আরএসএনসি-র একাধিক কপি চলমান নেই। আপনি একটি মুটেক্স তৈরি করতে পশুপাল ব্যবহার করতে পারেন যা নিশ্চিত করে যে ব্যাশ স্ক্রিপ্টটি সিঙ্গলটন: মেশিনে একবারে এটি প্রতিবার সঞ্চালিত হয়। সুতরাং আমরা ডিস্কে নিম্নলিখিত স্ক্রিপ্ট তৈরি করতে যাচ্ছি:
#!/bin/sh
SINK_INSTANCE=remoteuser@sink
DIR=/my/tree
KEY=~/.ssh/my-rsync-key
LOG = ~/my_rsync.log
LOCK = ~/my_rsync.lock
SOURCE=/my/tree
exec 9>${LOCK}
if ! flock -n 9 ; then
echo "Another instance of your rsync is already running";
exit 1
fi
echo "----------" >> ${LOG}
echo `date` >> ${LOG}
rsync -avz --delete -e "ssh -i ${KEY}" \
${SOURCE}/ {SINK_INSTANCE}:${SOURCE} 2>&1 >> ${LOG}
হিসাবে সংরক্ষণ করুন ~/my_rsync.sh
।
এই স্ক্রিপ্টটি আপনার জন্য rsync করার যত্ন নেবে। আপনাকে এখন যা করতে হবে তা লঞ্চডি এর মাধ্যমে সেট আপ করা এবং এটি একটি শক্ত লুপে চালিত করা উচিত। এখান থেকে দিকনির্দেশগুলি অনুসরণ করে এবং আমাদের চাহিদা পূরণের জন্য এটি সংশোধন করে আমরা ~/Library/LaunchAgents/my-rsync.plist
একটি পাঠ্য সম্পাদক তৈরি করতে এবং সামগ্রীগুলি তৈরি করতে যাচ্ছি :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>My Rsync</string>
<key>Program</key>
<string>/bin/sh</string>
<key>ProgramArguments</key>
<array>
<string>sh</string>
<string>-c</string>
<string>while sleep 5s; /Users/my/my_rsync.sh; done</string>
</array>
<key>ServiceDescription</key>
<string>Keep /my/tree synchronized with the machine sink</string>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
এটি জিনিস যত্ন নেওয়া উচিত।
সাধারণ সতর্কতা প্রয়োগ হয়: আমি এটিকে স্মৃতি থেকে লিখেছিলাম এবং এটি পরীক্ষা করি নি। সুতরাং অন্ধভাবে অনুসরণ করবেন না। পথে সাবধানে পরীক্ষা। যখনই আপনি সন্দেহ করছি ব্যবহার --dry-run
rsync বিকল্পটি। এটি আসলে কিছু না করে এটি কী করে তা মুদ্রণ করবে ।