TypeCodes

2015博客升级记(八):CentOS7定时备份博客程序的shell脚本

这是《2015年博客升级记》系列文章的第八篇,同时也是这一系列文章的最后一篇,内容主要记录在Linux系统中如何使用shell脚本备份服务器上的博客程序(当然也可以是主机上的任何目录或者文件)。

CentOS7定时备份博客程序的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 »