#!/bin/bash if [ "$#" -ne 2 ]; then echo echo -e "######################################################################" echo -e "######\033[41;37m Wrong paraments input, please refer below usage info !!! \033[0m######" echo -e "######################################################################" echo echo -e "Usage: \033[44;37m./ \033[0m" echo -e "Example\t: \033[45;37m$0 ed 127.0.0.1\033[0m" echo; exit 1 fi BAK_Project=ED8 WHO=`whoami` HOSTNAME=`hostnamectl | grep "Static hostname" | awk '{print $NF}'` TS=`date +"%Y%m%d-%H%M%S"` # Host Local Backup info setup WORK_Folder=/ED/$BAK_Project/Script_$BAK_Project Source_BAK_Folder=/ED/$BAK_Project/Backup_file BAK_1=$Source_BAK_Folder/backup-mysql-$BAK_Project.gz BAK_2=$Source_BAK_Folder/Script_$BAK_Project.tar BAK_3=$Source_BAK_Folder/Source_Files_$BAK_Project.tar # Remote ssh Backup info setup PW_File=/home/$WHO/PW/Remote_ssh.info ID=$1 IP=$2 Remote_BAK_Folder_BAK_Disk_X=/BAK_Disk_A/$HOSTNAME/$BAK_Project/Backup_file Remote_BAK_Folder_BAK_Disk_Y=/BAK_Disk_B/$HOSTNAME/$BAK_Project/Backup_file REMOTE_X_BAK_1=$Remote_BAK_Folder_BAK_Disk_X/backup-mysql-$BAK_Project-$TS.gz REMOTE_X_BAK_2=$Remote_BAK_Folder_BAK_Disk_X/Script_$BAK_Project-$TS.tar REMOTE_X_BAK_3=$Remote_BAK_Folder_BAK_Disk_X/Source_Files_$BAK_Project-$TS.tar REMOTE_Y_BAK_1=$Remote_BAK_Folder_BAK_Disk_Y/backup-mysql-$BAK_Project-$TS.gz REMOTE_Y_BAK_2=$Remote_BAK_Folder_BAK_Disk_Y/Script_$BAK_Project-$TS.tar REMOTE_Y_BAK_3=$Remote_BAK_Folder_BAK_Disk_Y/Source_Files_$BAK_Project-$TS.tar ##### Func CHK_WORK_Folder (){ echo -e "\033[32mCheck Work Folder ($WORK_Folder) \033[0m" ls $WORK_Folder > /dev/null 2>&1 if [[ $? == 0 ]]; then echo -e " \033[34mPass. \033[0m" else echo -e " \033[31mFail. Exit.\033[0m" echo exit fi } CHK_SRC_BAK_Folder (){ echo -e "\033[32mCheck local Backup source folder ($Source_BAK_Folder) \033[0m" ls $Source_BAK_Folder > /dev/null 2>&1 if [[ $? == 0 ]]; then echo -e " \033[34mPass. \033[0m" else echo -e " \033[31mFail. Exit.\033[0m" echo exit fi } CHK_PW_File (){ echo -e "\033[32mCheck PW file ($PW_File) \033[0m" ls $PW_File > /dev/null 2>&1 if [[ $? == 0 ]]; then echo -e " \033[34mPass. \033[0m" SSH_ID=`cat $PW_File | grep ID | awk '{print $NF}'` if [[ $SSH_ID != "" ]]; then echo -e " - \033[34mSSH ID: Good \033[0m" else echo -e " - \033[31mSSH ID: Bad. ID is empty\033[0m" fi SSH_PW=`cat $PW_File | grep PW | awk '{print $NF}'` if [[ $SSH_PW != "" ]]; then echo -e " - \033[34mSSH PW: Good \033[0m" else echo -e " - \033[31mSSH PW: Bad. ID is empty\033[0m" fi else echo -e " \033[31mFail. There is no PW file ($PW_File). Please make a new one. Exit. \033[0m" echo -e " Example of $PW_File: " echo -e " ID xxxx" echo -e " PW zzzzzzzz" echo exit fi } CHK_REMOTE_IP_AVA (){ echo -e "\033[32mCheck IP ($IP) availiable - ping ($IP) \033[0m" ping -c1 $IP > /dev/null 2>&1 if [[ $? == 0 ]]; then echo -e " \033[34mPass. \033[0m" else echo -e " \033[31mFail. There is no ping in IP ($IP). Exit \033[0m" echo exit fi } CHK_BAK1 (){ echo -e "\033[32mCheck local Backup file status ($BAK_1) \033[0m" ls $BAK_1 > /dev/null 2>&1 if [[ $? == 0 ]]; then echo -e " \033[34mPass. \033[0m" else echo -e " \033[31mFail. Exit.\033[0m" echo exit fi } CHK_BAK2 (){ echo -e "\033[32mCheck local Backup file status ($BAK_2) \033[0m" ls $BAK_2 > /dev/null 2>&1 if [[ $? == 0 ]]; then echo -e " \033[34mPass. \033[0m" else echo -e " \033[31mFail. Exit.\033[0m" echo exit fi } CHK_BAK3 (){ echo -e "\033[32mCheck local Backup file status ($BAK_3) \033[0m" ls $BAK_2 > /dev/null 2>&1 if [[ $? == 0 ]]; then echo -e " \033[34mPass. \033[0m" else echo -e " \033[31mFail. Exit.\033[0m" echo exit fi } MKDIR_REMOTE_BAK_Folder_BAK_Disk_X (){ echo -e "\033[32mmkdir Remote Backup folder alwyass ($ID@$IP:$Remote_BAK_Folder_BAK_Disk_X) \033[0m" expect -c " spawn ssh $ID@$IP \"mkdir -p $Remote_BAK_Folder_BAK_Disk_X;\" expect { \"*assword\" {set timeout 300; send \"$SSH_PW\r\";} \"yes/no\" {send \"yes\r\"; } } expect eof" } MKDIR_REMOTE_BAK_Folder_BAK_Disk_Y (){ echo -e "\033[32mmkdir Remote Backup folder alwyass ($ID@$IP:$Remote_BAK_Folder_BAK_Disk_Y) \033[0m" expect -c " spawn ssh $ID@$IP \"mkdir -p $Remote_BAK_Folder_BAK_Disk_Y;\" expect { \"*assword\" {set timeout 300; send \"$SSH_PW\r\";} \"yes/no\" {send \"yes\r\"; } } expect eof" } SCP_TO_BAK_Disk_X (){ echo -e "\033[32mSCP the backup files to Backup_Disk_X...\033[0m" expect -c " spawn scp $BAK_1 $ID@$IP:$REMOTE_X_BAK_1 expect { \"*assword\" {set timeout 300; send \"$SSH_PW\r\";} \"yes/no\" {send \"yes\r\"; } } spawn scp $BAK_2 $ID@$IP:$REMOTE_X_BAK_2 expect { \"*assword\" {set timeout 300; send \"$SSH_PW\r\";} \"yes/no\" {send \"yes\r\"; } } spawn scp $BAK_3 $ID@$IP:$REMOTE_X_BAK_3 expect { \"*assword\" {set timeout 300; send \"$SSH_PW\r\";} \"yes/no\" {send \"yes\r\"; } } expect eof" } SCP_TO_BAK_Disk_Y (){ echo -e "\033[32mSCP the backup files to Backup_Disk_Y...\033[0m" expect -c " spawn scp $BAK_1 $ID@$IP:$REMOTE_Y_BAK_1 expect { \"*assword\" {set timeout 300; send \"$SSH_PW\r\";} \"yes/no\" {send \"yes\r\"; } } spawn scp $BAK_2 $ID@$IP:$REMOTE_Y_BAK_2 expect { \"*assword\" {set timeout 300; send \"$SSH_PW\r\";} \"yes/no\" {send \"yes\r\"; } } spawn scp $BAK_3 $ID@$IP:$REMOTE_Y_BAK_3 expect { \"*assword\" {set timeout 300; send \"$SSH_PW\r\";} \"yes/no\" {send \"yes\r\"; } } expect eof" } CHK_WORK_Folder CHK_SRC_BAK_Folder CHK_PW_File CHK_REMOTE_IP_AVA CHK_BAK1 CHK_BAK2 CHK_BAK3 #MKDIR_REMOTE_BAK_Folder_BAK_Disk_X #SCP_TO_BAK_Disk_X #MKDIR_REMOTE_BAK_Folder_BAK_Disk_Y #SCP_TO_BAK_Disk_Y echo echo -e "\033[33mDone \033[0m" echo