linux全网备份脚本

备份机rsync服务端 192.168.0.170
客户端1 192.168.0.171
客户端2 192.168.0.172
客户端xxx 192.168.0.xxx

 

 

 

 

#192.168.0.170:
#搭建rsync server端
mkdir /data/backup -p
chown -R rsync.rsync /data/backup/
useradd -s /sbin/nologin -M rsync
echo "rsync_backup:123456" >/etc/rsync.password
chmod 600 /etc/rsync.password

cat >/etc/rsyncd.conf<<EOF
#rsync server#
uid = root
gid = root
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 192.168.0.0/24
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
path = /data/backup
EOF

rsync --daemon

  

#192.168.0.171 备份脚本

vim /data/scripts/bak.sh
#/bin/bash
#备份策略:每个星期五进行一次全量备份,其他时间差异备份,本地保留备份30天,异地保留60天。
#备份至192.168.0.170:/data/backup/时间/IP-主机名
#备份脚本在每台机器/data/backup/bak.sh 每天晚上2点进行备份操作
#如需备份系统其他路径,请在变量BACKUP_DIR新增一个路径
#备份日志在/var/log/backup.log

. /etc/profile
HOST=`hostname`
DATE=`date +%F`
IP=`/usr/sbin/ip a|grep inet|egrep -v "127.0.0.1|fe80|::"|awk -F'/' '{print $1}'|awk  '{print $2}'`
BACKUP_DIR="/data/ysj/ /etc/ /var/spool/cron/ /data/scripts/"
[ -f /etc/rsync.password ] || echo "123456" >/etc/rsync.password && chmod 600 /etc/rsync.password
[ -d /data/backup ] || mkdir -p /data/backup
[ -d /data/logs/ ] || mkdir -p /data/logs/
[ -d /data/ysj/ ] || mkdir -p /data/ysj/
[ -d /data/scripts ] || mkdir -p /data/scripts


full(){
  mkdir -p /data/backup/$DATE/$IP-$HOST
  [ -d /data/backup/full ] || mkdir -p  /data/backup/full 
  cd /data/backup/full
  tar -czf app.tar.gz $BACKUP_DIR
  tar xf app.tar.gz
  mv app.tar.gz /data/backup/$DATE/$IP-$HOST
}

incre(){
  mkdir -p /data/backup/$DATE/$IP-$HOST
  for NEW_DIR in `echo $BACKUP_DIR`;do
    rsync --dry-run -rcnC --out-format="%n" $NEW_DIR /data/backup/full$NEW_DIR |grep -v "/$"|grep -v "^skipping" |xargs -i cp --parents $NEW_DIR{} /data/backup/$DATE/$IP-$HOST
  done
}

db(){
   mkdir -p /data/backup/$DATE/$IP-$HOST
   cd /data/backup/$DATE/$IP-$HOST
   mongodump -o /data/backup/$DATE/$IP-$HOST/mongodb
   tar -czvf db.tar.gz /data/backup/$DATE/$IP-$HOST/mongodb
}

main(){
  if [ `date +%w` == 5 ];then
    full
    if [ `ps -ef|grep mongodb|grep -v grep|wc -l` -ge 1 ];then
      db
    fi
  else
    incre
  fi
  rsync -avz /data/backup/$DATE rsync_backup@192.168.0.170::backup --password-file=/etc/rsync.password
  if [ $? = 0 ];then
    echo -e "`date +%Y-%m-%d\ %T` Backup \e[1;32msuccess\e[0m" >>/var/log/backup.log
  else
    echo -e "`date +%Y-%m-%d\ %T` Backup \e[1;31mfailed\e[0m" >>/var/log/backup.log
  fi
}

main


crontab -e
00 2 * * * /data/scripts/bak.sh

需要备份的机器将bak.sh拷贝一份,添加一条计划任务即可.

posted @ 2017-12-06 16:52  kevin77777  阅读(230)  评论(0)    收藏  举报