这是《2015年博客升级记》系列文章的第八篇,同时也是这一系列文章的最后一篇,内容主要记录在Linux系统中如何使用shell脚本备份服务器上的博客程序(当然也可以是主机上的任何目录或者文件)。
1 使用说明
下面是Linux系统文件的shell备份脚本,其中参数BACKUPDIR
表示备份文件的存储路径、ORGDIR
是待备份的Linux文件路径、NUMDAYS
表示保留多少天以内的备份文件。最终,每次执行这个脚本生成的备份文件名类似于系统日期时间+.tar.gz
,例如20150606.tar.gz。
使用时通过chmod +x typecodes_backup.sh
命令添加执行权限,然后可以利用Linux系统的crontab定时任务工具执行该脚本。例如下面这个配置就是每天凌晨1点的时候执行该shell脚本,生成博客程序的备份文件。当然也可以手动执行命令./typecodes_backup.sh
即可立即生成备份文件。
[root@typecodes bak_list]# crontab -e
0 1 * * * /mydata/backups/bak_list/typecodes_backup.sh
2 脚本mysql_backup.sh的全部内容
利用前文mysql备份脚本的框架,写了可以备份Linux主机上的任意目录或者文件的shell脚本,内容如下:
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
115
116
117
118
119 | #!/bin/bash
# Blog Program Backup Script v1.0.0(applying to backup any linux directory or files)
# (c) 2015 vfhky https://typecodes.com/linux/centos7blogregularbackup.html
# https://github.com/vfhky/shell-tools/blob/master/backup/typcodes-backup.sh
# https://coding.net/u/vfhky/p/shell-tools/git/blob/master/backup/typcodes-backup.sh
# Shell Script Alias Name
PRGNAME="typecodes"
# Backup to this directory
BACKUPDIR=/mydata/backups/data/typecodes
# The blog programs dir
ORGDIR=/usr/share/nginx/html
# Number of days to keep
NUMDAYS=60
# Some linux command
FINDCMD="find"
TARCMD="tar -zcf"
# Backup date format,e.g 20150505_2010
BACKUPDATE=`date +%Y%m%d_%H%M`
function USAGE() {
cat << EOF
usage: $0 options
This script backs up the blog programs(or other files you want).
OPTIONS:
-h Show this message
-a Backup all files
-l Databases to backup (space seperated)
-n Number of days to keep backups
EOF
}
while getopts "hal:n:" opt; do
case $opt in
a)
PRGNAME=""
;;
h)
USAGE
exit 1
;;
l)
PRGNAME="$OPTARG"
;;
n)
NUMDAYS=$OPTARG
;;
\?)
USAGE
exit
;;
:)
echo "Option -$OPTARG requires an argument." >&2
exit 1
;;
esac
done
function ERROR() {
echo && echo "[error] $@"
exit 1
}
function NOTICE() {
echo && echo "[notice] $@"
}
function RUNCMD() {
echo $@
eval $@
}
# Sanity checks
if [ ! -n "$BACKUPDIR" ]; then
ERROR "Invalid backup directory"
fi
if [[ ! $NUMDAYS =~ ^[0-9]+$ ]]; then
ERROR "Invalid number of days: $NUMDAYS"
elif [ "$NUMDAYS" -eq "0" ]; then
ERROR "Number of days must be greater than zero"
fi
# Lock down permissions
umask 077
# Create directory if needed
RUNCMD mkdir -p -v $BACKUPDIR
if [ ! -d $BACKUPDIR ]; then
ERROR "Invalid directory: $BACKUPDIR"
fi
RC=0
RUNCMD "cd $ORGDIR && $TARCMD $BACKUPDATE.tar.gz ./ || mv $BACKUPDATE.tar.gz $BACKUPDIR"
RC=$?
if [ $RC -gt 0 ]; then
ERROR "TypeCodesDump failed!"
else
NOTICE "Removing dumps older than $NUMDAYS days..."
RUNCMD "$FINDCMD $BACKUPDIR -name \"*.tar.gz\" -type f -mtime +$NUMDAYS -print0 | xargs -0 rm -fv"
NOTICE "Listing backup directory contents..."
RUNCMD ls -la $BACKUPDIR
NOTICE "Dumping TypeCodes Programs is complete!"
fi
# exit 0
|
3 Shell Script工具集合
同前文的mysql备份脚本一样,这个博客程序备份脚本也托管在自己的Coding.net和GitHub上:
Coding.net地址:https://github.com/vfhky/shell-tools/;
GitHub地址:https://coding.net/u/vfhky/p/shell-tools/git。
Comments »