Kusprayitna Blogs

Hidup untuk berbagi ilmu :: IT Linux Windows Database Oracle PHP OpenSource

Backup webserver ke FTP Server dengan script

Posted by kusprayitna on December 22nd, 2009

Setelah kemarin berhasilmembuat script untuk membuat subdomain dalam managemen webserver Apache, maka di perlukan aktifitas harian yang dapat menyingkat pekerjaan, yaitu backup otomatis.

Fitur yang diinginkan yaitu :

  1. Backup semua home directori "/home/"
  2. File backup dilakukan kompresi
  3. Backup dilakukan setiap hari, yang otomatis berputar selama 1 minggu, jadai ada 7 file backup harian saja
  4. File backup disimpan di FTP server menggunakan FTP klien yang klasik
  5. Backup file di lokal di simpan di /home/backup

Maka bash script ang dibuat yaitu :

#!/bin/sh
# Backup data seluruh server /home
# By Prayitna Kuswidianta

#-----------------------------------------
SOURCE_DIR="/home"
SOURCE_EXCLUDE="backup"
DEST_DIR="/home/backup"
NOW=$(date +"%y-%m-%d")
LASTWEEK=$(date  --date='7 days ago' +"%y-%m-%d")
DAY=$(date +"%a")
TGL=$(date +"%d")

FTPD="kusbackup"
FTPU="prayitna"
FTPP="prayitna"
FTPS="192.168.30.32"

#-----------------------------------------
# OPSI
#----------------------------------------
LocalBackup=No

#------------------------------------------
# Fungsi
#------------------------------------------
DoBackup()
{
echo Compress source data $SOURCE_DIR/$1/
tar -czf $DEST_DIR/$1$DAY$NOW.tar.gz $SOURCE_DIR/$1/
return 0
}
DoDelete()
{
echo Delete file backup $DEST_DIR/$1$DAY*.tar.gz
rm $DEST_DIR/$1$DAY*.tar.gz -f
return 0
}

DoFTPdaily()
{
echo Transfer file to FTP Server $1 , daily backup

#perintah FTP berikut harus ditulis mepet kiri
ftp -u $FTPS <<EOF
user $FTPU $FTPP
mkdir $FTPD
cd $FTPD
mkdir $1
cd $1
mkdir daily
cd daily
lcd $DEST_DIR
del $1$DAT$LASTWEEK.tar.gz
put $1$DAY$NOW.tar.gz
bye
EOF

return 0
}

DoFTPmonthly()
{
echo Transfer file to FTP Server $1 , monthly backup

#perintah FTP berikut harus ditulis mepet kiri
ftp -u $FTPS <<EOF
user $FTPU $FTPP
mkdir $FTPD
cd $FTPD
mkdir $1
cd $1
mkdir monthly
cd monthly
lcd $DEST_DIR
put $1$DAY$NOW.tar.gz
bye
EOF

return 0
}

#-------------------------------------------
# Daily backup
#-------------------------------------------
# 1. Hapus backup minggu sebelumnya, yang harinya sama
# 2. Backup
# 3. Simpan ke FTP Server juga

# lakukan iterasi semua folder
X=${#SOURCE_DIR}+1
for d in $SOURCE_DIR/*
do
if [ -d "$d" ]; then
folder=${d:$X}
if [ $folder != $SOURCE_EXCLUDE ]; then
echo Backup $folder start
DoDelete "$folder"
DoBackup "$folder"
DoFTPdaily "$folder"
if [ $TGL=="01" ]; then
DoFTPmonthly "$folder"
fi
if [ $LocalBackup==No ]; then
DoDelete "$folder"
fi
echo Backup $folder finish
fi
fi
done

Penjelasan dari script diatas yaitu :

  1. SOURCE_DIR= folder home yang akan di backup
    SOURCE_EXCLUDE= folder yang tidak ikut dibackup
    DEST_DIR= tujuan lokal folder untuk backup
    NOW=$(date +"%y-%m-%d") --> tanggal hari ini misal : 2009-12-22
    LASTWEEK=$(date  --date='7 days ago' +"%y-%m-%d") --> tanggal minggu lalu misal :2009-12-15
    DAY=$(date +"%a") --> hari ini misal :Tue
    TGL=$(date +"%d") --> tanggal hari ini, misal : 15

    FTPD="kusbackup"  --> directori tempat backup di FTP server
    FTPU="prayitna"    --> user ke FTP server
    FTPP="prayitna"  --> password ke FTP server
    FTPS="192.168.30.32"  --> alamat Ip FTP server

  2. Fungsi yang dibuat yaitu :
    DoBackup() --> untuk membackup file dalam folder dibawah home
    DoDelete() --> untuk menghapus file backup  di lokal
    DoFTPDaily() --> upload file hasil backupke FTPserver di folder daily
    DoFTPMonthly() --> upload file hasil backup di FTP server di folder monthly
  3. Dalam penghapusan file di lokal ada perbedaan cara dengan penghapusan file di FTP server, sebab misal nama file yaitu  "NamaFileTue2009-12-22.tar.gz" maka cara penghapusan di lokal cukup dengan "rm NamaFileTue*.tar.gz" (yaitu menghapus backup file hari selasa) akan tetapi fi FTP server harus disebutkan nama filenya secara lengkap.
  4. Dalam menuliskan perintah di script, ketika eksekusi perintah / aplikasi , harus dituliskan mepet kiri seperti halnya perintah di fungsi DoFTPDaily().

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>