Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

ED8Remote_backup.sh 6.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. #!/bin/bash
  2. if [ "$#" -ne 2 ]; then
  3. echo
  4. echo -e "######################################################################"
  5. echo -e "######\033[41;37m Wrong paraments input, please refer below usage info !!! \033[0m######"
  6. echo -e "######################################################################"
  7. echo
  8. echo -e "Usage: \033[44;37m./<cmd.sh> <Remote ssh ID> <Remote ssh IP>\033[0m"
  9. echo -e "Example\t: \033[45;37m$0 ed 127.0.0.1\033[0m"
  10. echo; exit 1
  11. fi
  12. BAK_Project=ED8
  13. WHO=`whoami`
  14. #HOSTNAME=`hostnamectl | grep "Static hostname" | awk '{print $NF}'`
  15. HOSTNAME=`hostname`
  16. TS=`date +"%Y%m%d-%H%M%S"`
  17. # Host Local Backup info setup
  18. WORK_Folder=/ED/$BAK_Project/Script_$BAK_Project
  19. Source_BAK_Folder=/ED/$BAK_Project/Backup_file
  20. BAK_1=$Source_BAK_Folder/backup-mysql-$BAK_Project.gz
  21. BAK_2=$Source_BAK_Folder/Script_$BAK_Project.tar
  22. BAK_3=$Source_BAK_Folder/Source_Files_$BAK_Project.tar
  23. # Remote ssh Backup info setup
  24. PW_File=/home/$WHO/PW/Remote_ssh.info
  25. ID=$1
  26. IP=$2
  27. Remote_BAK_Folder_BAK_Disk_X=/BAK_Disk_A/$HOSTNAME/$BAK_Project/Backup_file
  28. Remote_BAK_Folder_BAK_Disk_Y=/BAK_Disk_B/$HOSTNAME/$BAK_Project/Backup_file
  29. REMOTE_X_BAK_1=$Remote_BAK_Folder_BAK_Disk_X/backup-mysql-$BAK_Project-$TS.gz
  30. REMOTE_X_BAK_2=$Remote_BAK_Folder_BAK_Disk_X/Script_$BAK_Project-$TS.tar
  31. REMOTE_X_BAK_3=$Remote_BAK_Folder_BAK_Disk_X/Source_Files_$BAK_Project-$TS.tar
  32. REMOTE_Y_BAK_1=$Remote_BAK_Folder_BAK_Disk_Y/backup-mysql-$BAK_Project-$TS.gz
  33. REMOTE_Y_BAK_2=$Remote_BAK_Folder_BAK_Disk_Y/Script_$BAK_Project-$TS.tar
  34. REMOTE_Y_BAK_3=$Remote_BAK_Folder_BAK_Disk_Y/Source_Files_$BAK_Project-$TS.tar
  35. ##### Func
  36. CHK_WORK_Folder (){
  37. echo -e "\033[32mCheck Work Folder ($WORK_Folder) \033[0m"
  38. ls $WORK_Folder > /dev/null 2>&1
  39. if [[ $? == 0 ]]; then
  40. echo -e " \033[34mPass. \033[0m"
  41. else
  42. echo -e " \033[31mFail. Exit.\033[0m"
  43. echo
  44. exit
  45. fi
  46. }
  47. CHK_SRC_BAK_Folder (){
  48. echo -e "\033[32mCheck local Backup source folder ($Source_BAK_Folder) \033[0m"
  49. ls $Source_BAK_Folder > /dev/null 2>&1
  50. if [[ $? == 0 ]]; then
  51. echo -e " \033[34mPass. \033[0m"
  52. else
  53. echo -e " \033[31mFail. Exit.\033[0m"
  54. echo
  55. exit
  56. fi
  57. }
  58. CHK_PW_File (){
  59. echo -e "\033[32mCheck PW file ($PW_File) \033[0m"
  60. ls $PW_File > /dev/null 2>&1
  61. if [[ $? == 0 ]]; then
  62. echo -e " \033[34mPass. \033[0m"
  63. SSH_ID=`cat $PW_File | grep ID | awk '{print $NF}'`
  64. if [[ $SSH_ID != "" ]]; then
  65. echo -e " - \033[34mSSH ID: Good \033[0m"
  66. else
  67. echo -e " - \033[31mSSH ID: Bad. ID is empty\033[0m"
  68. fi
  69. SSH_PW=`cat $PW_File | grep PW | awk '{print $NF}'`
  70. if [[ $SSH_PW != "" ]]; then
  71. echo -e " - \033[34mSSH PW: Good \033[0m"
  72. else
  73. echo -e " - \033[31mSSH PW: Bad. ID is empty\033[0m"
  74. fi
  75. else
  76. echo -e " \033[31mFail. There is no PW file ($PW_File). Please make a new one. Exit. \033[0m"
  77. echo -e " Example of $PW_File: "
  78. echo -e " ID xxxx"
  79. echo -e " PW zzzzzzzz"
  80. echo
  81. exit
  82. fi
  83. }
  84. CHK_REMOTE_IP_AVA (){
  85. echo -e "\033[32mCheck IP ($IP) availiable - ping ($IP) \033[0m"
  86. ping -c1 $IP > /dev/null 2>&1
  87. if [[ $? == 0 ]]; then
  88. echo -e " \033[34mPass. \033[0m"
  89. else
  90. echo -e " \033[31mFail. There is no ping in IP ($IP). Exit \033[0m"
  91. echo
  92. exit
  93. fi
  94. }
  95. CHK_BAK1 (){
  96. echo -e "\033[32mCheck local Backup file status ($BAK_1) \033[0m"
  97. ls $BAK_1 > /dev/null 2>&1
  98. if [[ $? == 0 ]]; then
  99. echo -e " \033[34mPass. \033[0m"
  100. else
  101. echo -e " \033[33mWarning! There is no local backup file ($BAK_1).\033[0m"
  102. echo
  103. fi
  104. }
  105. CHK_BAK2 (){
  106. echo -e "\033[32mCheck local Backup file status ($BAK_2) \033[0m"
  107. ls $BAK_2 > /dev/null 2>&1
  108. if [[ $? == 0 ]]; then
  109. echo -e " \033[34mPass. \033[0m"
  110. else
  111. echo -e " \033[33mWarning! There is no local backup file ($BAK_2).\033[0m"
  112. echo
  113. fi
  114. }
  115. CHK_BAK3 (){
  116. echo -e "\033[32mCheck local Backup file status ($BAK_3) \033[0m"
  117. ls $BAK_2 > /dev/null 2>&1
  118. if [[ $? == 0 ]]; then
  119. echo -e " \033[34mPass. \033[0m"
  120. else
  121. echo -e " \033[33mWarning! There is no local backup file ($BAK_3).\033[0m"
  122. echo
  123. fi
  124. }
  125. MKDIR_REMOTE_BAK_Folder_BAK_Disk_X (){
  126. echo -e "\033[32mmkdir Remote Backup folder always ($ID@$IP:$Remote_BAK_Folder_BAK_Disk_X) \033[0m"
  127. expect -c "
  128. spawn ssh $ID@$IP \"mkdir -p $Remote_BAK_Folder_BAK_Disk_X;\"
  129. expect {
  130. \"*assword\" {set timeout 300; send \"$SSH_PW\r\";}
  131. \"yes/no\" {send \"yes\r\"; }
  132. }
  133. expect eof"
  134. }
  135. MKDIR_REMOTE_BAK_Folder_BAK_Disk_Y (){
  136. echo -e "\033[32mmkdir Remote Backup folder always ($ID@$IP:$Remote_BAK_Folder_BAK_Disk_Y) \033[0m"
  137. expect -c "
  138. spawn ssh $ID@$IP \"mkdir -p $Remote_BAK_Folder_BAK_Disk_Y;\"
  139. expect {
  140. \"*assword\" {set timeout 300; send \"$SSH_PW\r\";}
  141. \"yes/no\" {send \"yes\r\"; }
  142. }
  143. expect eof"
  144. }
  145. SCP_TO_BAK_Disk_X (){
  146. echo -e "\033[32mSCP the backup files to Backup_Disk_X...\033[0m"
  147. expect -c "
  148. spawn scp $BAK_1 $ID@$IP:$REMOTE_X_BAK_1
  149. expect {
  150. \"*assword\" {set timeout 300; send \"$SSH_PW\r\";}
  151. \"yes/no\" {send \"yes\r\"; }
  152. }
  153. expect eof"
  154. expect -c "
  155. spawn scp $BAK_2 $ID@$IP:$REMOTE_X_BAK_2
  156. expect {
  157. \"*assword\" {set timeout 300; send \"$SSH_PW\r\";}
  158. \"yes/no\" {send \"yes\r\"; }
  159. }
  160. expect eof"
  161. expect -c "
  162. spawn scp $BAK_3 $ID@$IP:$REMOTE_X_BAK_3
  163. expect {
  164. \"*assword\" {set timeout 300; send \"$SSH_PW\r\";}
  165. \"yes/no\" {send \"yes\r\"; }
  166. }
  167. expect eof"
  168. }
  169. SCP_TO_BAK_Disk_Y (){
  170. echo -e "\033[32mSCP the backup files to Backup_Disk_Y...\033[0m"
  171. expect -c "
  172. spawn scp $BAK_1 $ID@$IP:$REMOTE_Y_BAK_1
  173. expect {
  174. \"*assword\" {set timeout 300; send \"$SSH_PW\r\";}
  175. \"yes/no\" {send \"yes\r\"; }
  176. }
  177. expect eof"
  178. expect -c "
  179. spawn scp $BAK_2 $ID@$IP:$REMOTE_Y_BAK_2
  180. expect {
  181. \"*assword\" {set timeout 300; send \"$SSH_PW\r\";}
  182. \"yes/no\" {send \"yes\r\"; }
  183. }
  184. expect eof"
  185. expect -c "
  186. spawn scp $BAK_3 $ID@$IP:$REMOTE_Y_BAK_3
  187. expect {
  188. \"*assword\" {set timeout 300; send \"$SSH_PW\r\";}
  189. \"yes/no\" {send \"yes\r\"; }
  190. }
  191. expect eof"
  192. }
  193. CHK_WORK_Folder
  194. CHK_SRC_BAK_Folder
  195. CHK_PW_File
  196. CHK_REMOTE_IP_AVA
  197. CHK_BAK1
  198. CHK_BAK2
  199. CHK_BAK3
  200. #MKDIR_REMOTE_BAK_Folder_BAK_Disk_X; wait
  201. #SCP_TO_BAK_Disk_X
  202. #MKDIR_REMOTE_BAK_Folder_BAK_Disk_Y; wait
  203. #SCP_TO_BAK_Disk_Y
  204. echo
  205. echo -e "\033[33mDone \033[0m"
  206. echo