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拷贝一份,添加一条计划任务即可.

浙公网安备 33010602011771号