3/27/2012

লিনক্ষ: ফাইলের ব্যাকআপ নেবার ব্যাশ স্ক্রিপ্ট

ফাইলের ব্যকআপ নেওয়াটা অত্যন্ত জরুরি একটা কাজ। একটা ব্যাশ স্ক্রিপ্ট লিখেছিলাম দিনের কাজের শেষে ফাইলের ব্যাকআপ নেবার জন্য। হারিয়েও ফেলেছিলাম সেটি। ঠিক হারাইনি, ভুলে rm -rf দিয়ে মুছে ফেলেছিলাম। পরে আবার লিখেছি। এর অনেক কিছুই লিনাক্সের বিভিন্ন ফোরাম থেকে নেওয়া। সাজানোটা নিজের। অনেকের কাজে লাগতে পারে ভেবে নিচে দেওয়া। দিনের শেষে স্ক্রিপ্টটি চালালে দিনটি রবিবার হলে ডিরেক্টরির সব ফাইলের ব্যাকআপ নেবে আর অন্য কোনও দিন হলে কেবল একদিনে পরিবর্তিত ফাইলের ব্যাকআপ নেবে। ক্রনট্যাব থেকে চালালে আরও খানিকটা সহজ হয় ব্যাপারটা।

-------------------------------->8--------------------------------
#!/bin/bash
# ভ্যারিয়েবল: আজকের তারিখ
date=`date +%y%m%d%a`
# ভ্যারিয়েবল: যে ডিরেক্টরির ব্যাকআপ নেওয়া হবে
dest="/home/dir_name"
# ভ্যারিয়েবল: ব্যাকআপ ফাইল যেখানে থাকবে
src="/home/dir_name"
# ভ্যারিয়েবল: লগ ফাইলের নাম
log="backup.log"
# ভ্যারিয়েবল: মাউন্ট ডিভাইস
devmnt=`df | grep /dev/mount_device`

# পুরো ব্যাকআপের ফাংশন
fbackup () {
# পুরো ব্যকআপের জন্য ফাইলে নাম
fname="fback"
# স্কিনে ব্যকআপ শুরুর মেসেজ
echo "Backing up $src"
# লগে ব্যাকআপ শুরুর মেসেজ
echo -e "Full backup of $src on system_name" >> ${log}
# লগে ব্যাকআপের তারিখ
echo -e "at" `date` "\n" >> ${log}
# tar এবং gzip ব্যবহার করে ডিরেক্টরির ব্যাকআপ, কয়েক ধরণের ফাইল ছাড়া
tar vczfP ${dest}/${fname}-${date}.tar.gz ${src} --exclude=/home/dir_name/*.tar.gz --exclude=/home/dir_name/backup.log>> ${log}
# লগে ব্যাকআপ শেষের মেসেজ
echo -e "-----------\n" >> ${log}
# ব্যাকআপ ফাইলের আকার
ls -lh ${dest}/${fname}-${date}.tar.gz
# স্ক্রিনে ব্যাকআপ শেষের মেসেজ
echo -e "Full backup completed\n"
}

# প্রতিদিনের ব্যকআপের ফাংশন
pbackup () {
# আংশিক ব্যকআপের জন্য ফাইলে নাম
fname="pback"
# স্কিনে ব্যকআপ শুরুর মেসেজ
echo "Backing up $src"
# লগে ব্যাকআপ শুরুর মেসেজ
echo -e "Partial backup of $src on system_name" >> ${log}
# লগে ব্যাকআপের তারিখ
echo -e "at" `date` "\n" >> ${log}
# tar এবং gzip ব্যবহার করে ডিরেক্টরির ব্যাকআপ, কয়েক ধরণের ফাইল ছাড়া
find ${src} -mtime -1 -type f -print | tar vczfP ${dest}/${fname}-${date}.tar.gz -T - >> ${log}
# লগে ব্যাকআপ শেষের মেসেজ
echo -e "-----------\n" >> ${log}
# ব্যাকআপ ফাইলের আকার
ls -lh ${dest}/${fname}-${date}.tar.gz
# স্ক্রিনে ব্যাকআপ শেষের মেসেজ
echo -e "Partial backup completed\n"
}

# ডিভাইস মাউন্টেড থাকলে, সপ্তাহের কোন দিন
if [ -n "$devmnt" ]; then
case "$(date +%a)" in
# রবিবার হলে, পুরো ব্যকআপ
Sun) fbackup;;
# অন্যান্য দিনে গেল এক দিনের পরিবর্তনের ব্যাকআপ
Mon|Tue|Wed|Thu|Fri|Sat) pbackup;;
esac
else
# ডিভাইস মাউন্টেড না থাকলে, মাউন্ট করার জন্য মেসেজ
echo "Backup block device not mounted";
fi
exit 0

-------------------------------->8--------------------------------

No comments:

Post a Comment