大盘鸡,是指磁盘容量比较大的VPS,可以用来备份文件和数据。
做跨境业务的人士和公司,手中总有大量不同地区VPS。有的VPS是从一些小IDC厂商中购买的,总有一些会跑路。被跑路了钱财的损失肯定是找不回来了,但更加令人痛心的是数据丢失了。
这里分享一个简单脚本,可以使用来定期把vps上的目录备份到磁盘更大的vps(大盘鸡)上面去,一旦发生跑路事件,起码数据保住了,也是不幸中的万幸。
简单脚本,但是我自己用起来感觉比较实用,分享给有需要的人士。
用法 :
3个参数
./tarscp.sh 目录名或文件名 user@xx.xx.xx.xx:data user的密码
user 是用户名
data 是 /home/user 下存在的 data 目录,即是 /home/user/data/
过程:
先调用 tar 在 /tmp 目录生成一个 tgz 文件,
再scp 到目标大盘鸡上去,文件名带上时间戳和源VPS的IP v4地址。
依赖:
需要系统安装了expect,用于自动登录。
把下面的内容复制到一个新文件 tarscp.sh 中, chmod ugo+x tarscp.sh
#!/bin/bash
# 首发在 https://huiwushi.cc
# named tarscp.sh
myip=`curl http://httpbin.org/ip | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'`
if [ -z "${myip}" ] ; then
echo "can't get VPS ip"
exit 3
fi
echo "VPS IP" ${myip}
DIR=$1
if [ -z "${DIR}" ] ; then
echo usage $0 "<file>" "login_name@host:path" "passwd_of_login"
exit 2
fi
if [ $# -lt 3 ]; then
echo usage $0 "<file>" "login_name@host:path" "passwd_of_login"
exit 127
fi
SSH_LOGIN_PATH=$2
SSH_LOGIN_PWD=$3
echo tar this file/dir ${DIR} ...
fn=`echo ${DIR}| sed "s:/:++:g"`
isroot=`expr substr $DIR 1 1 == '/'`
#not from root
if [ $isroot -eq 1 ] ; then
echo cd /
cd /
DIR=`echo $DIR | awk '{ print substr($1, 2, length($1)-1) }' `
fi
TMPFN=/tmp/${fn}.tgz
echo tar -zcvf $TMPFN $DIR
dt=`date +%y%m%d%H%M`
tar -zcvf $TMPFN $DIR
if [ $? -eq 0 ] ; then
echo scp $TMPFN $LOGIN_PATH/${myip}.${dt}.$fn.tgz
/usr/bin/expect <<EOF
set time 30
spawn scp $TMPFN ${SSH_LOGIN_PATH}/${myip}.${dt}.$fn.tgz
expect {
"*yes/no" { send "yes\r"; exp_continue}
"*password:" {send "${SSH_LOGIN_PWD}\r"}
}
expect eof
EOF
rm -rf $TMPFN
else
echo file not exists
fi
#===脚本结束===