-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbackup.scr
executable file
·114 lines (93 loc) · 3.06 KB
/
backup.scr
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#!/bin/bash
export PATH=/bin:/usr/bin:$PATH
# Need be edited to your login id
LOGIN=jason
# Need be edited to provide IP and remote login for your remote PC,
# also setup no password scp access for remote PC.
# If no IP provided, will assume the dir has been mounted to
# local PC, and isMOUNT must be set an non-empty value.
REMOTE_PC=172.17.214.202
REMOTE_LOGIN=jason
isMOUNT=
# Need be edited to point to your dir for remote PC or local mounted dir
REMOTE_PC_DIR=/home/jason/PC1_BACKUP
# Optional for editing
LINUX_VER=ubuntu
BIN_DIR=$HOME
# Variables defined by the tool, do not change
HOME=/home/${LOGIN}
BKUP_DIR=$HOME/Backup
LOG=backup.log
DEBUG_FILE=${BKUP_DIR}/.debug_backup
[ ! -z ${isMOUNT} ] || [ ! -z ${REMOTE_PC} ] || exit 1
[ -d ${BKUP_DIR} ] || mkdir -p ${BKUP_DIR}
exec 2>>${BKUP_DIR}/${LOG}
echo "======================================================================" >>${BKUP_DIR}/${LOG}
echo "${0##*/} started on $(date)" >>${BKUP_DIR}/${LOG}
if [ -f ${DEBUG_FILE} ]
then
echo "******Debug mode has been turned on******" >> ${BKUP_DIR}/${LOG}
set -x
fi
DATE=$(date +"%Y%m%d")
if [ -z ${DATE} ]
then
echo "ERROR: Cannot determine date. Exit!">>${BKUP_DIR}/${LOG}
exit 1
fi
mkdir -p ${BKUP_DIR}/${DATE}
cd $HOME
# Ignore comments and blank lines in bkup.list file
cat ${BIN_DIR}/bkup.list|grep -v ^# |grep -v ^$ |while read dir_file
do
if [ -d ${dir_file} ]
then
tar -czvf ${BKUP_DIR}/${DATE}/${dir_file##*/}.tar.gz ${dir_file}
if [[ $? -ne 0 ]]
then
echo "ERROR: Failed to backup ${dir_file}!" >> ${BKUP_DIR}/${LOG}
fi
elif [ -f ${dir_file} ]
then
cp ${dir_file} ${BKUP_DIR}/${DATE}/
elif [ ${dir_file} == "CRONTAB" ]
then
crontab -l >${BKUP_DIR}/${DATE}/crons
else
echo "ERROR: ${dir_file} is neither a directory or a file. Failed to backup it!" >> ${BKUP_DIR}/${LOG}
fi
done
cd ${BKUP_DIR}
tar -czvf ${LINUX_VER}.${LOGIN}.${DATE}.tar.gz ${DATE}
echo "${LINUX_VER}.${LOGIN}.${DATE}.tar.gz has been succesfully created at $(date)!" >>${LOG}
rm -rf ${DATE}
# Transfered to remote PC
if [ ! -z ${REMOTE_PC} ]
then
scp -o ConnectTimeout=30 ${LINUX_VER}.${LOGIN}.${DATE}.tar.gz ${REMOTE_LOGIN}@${REMOTE_PC}:${REMOTE_PC_DIR}
elif [ -d ${REMOTE_PC_DIR} ]
then
cp ${LINUX_VER}.${LOGIN}.${DATE}.tar.gz ${REMOTE_PC_DIR}/
echo "${LINUX_VER}.${LOGIN}.${DATE}.tar.gz has been succesfully transfered to ${REMOTE_PC_DIR}!" >>${LOG}
DISK_USE=$(df ${REMOTE_PC_DIR} |tail -1 |awk '{print $5}')
if [[ ${DISK_USE} =~ [0-9]% ]]
then
echo "INFO: ${REMOTE_PC_DIR} disk usage is: ${DISK_USE}" >>${LOG}
if [ ${DISK_USE//%} -gt 80 ]
then
echo "ERROR: ${REMOTE_PC_DIR} disk usage has beyond 80%. Urgent clean up needed! " >>${LOG}
elif [ ${DISK_USE//%} -gt 60 ]
then
echo "WARNING: ${REMOTE_PC_DIR} disk usage has beyond 60%. Clean up needed! " >>${LOG}
fi
else
echo "WARNING: Cannot determine the disk usage of ${REMOTE_PC_DIR}!" >>${LOG}
fi
else
echo "ERROR: ${REMOTE_PC_DIR} missing! ${LINUX_VER}.${LOGIN}.${DATE}.tar.gz cannot been transferred to PC!" >>${LOG}
fi
if [ -f ${DEBUG_FILE} ]
then
set +x
fi
echo "${0##*/} completed on $(date)" >>${LOG}