|  | 
 
| 本帖最后由 wise指南 于 2022-1-6 23:22 编辑 
 VPS多了,总有一些是跑路的。跑路了钱财的损失肯定是找不回来了,但更加令人痛心的是数据丢失了。
 
 这里分享一个简单脚本,可以使用来定期把vps上的目录备份到磁盘更大的vps上面去,一旦发生跑路事件,起码数据保住了。
 
 简单脚本,但是我自己用起来感觉比较实用,分享给有需要的人士。
 
 用法 : 给3个参数
 
 tarscp.sh 目录名或文件名 [email protected]: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
 # 首发在 http://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
 
 #===脚本结束===
 
 
 | 
 |