| 
 | 
 
 本帖最后由 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 
 
#===脚本结束=== 
 
 |   
 
 
 
 |