一、将当前服务器上的文件传输到对应服务器目录下
最近在迁移服务器,自动化比较省时省力,就写了一个scp.sh的脚本,只是将老服务器的tar包给复制到新服务器的对应目录下:
在Windows桌面编写scp.sh脚本:
#! /bin/sh
# 执行scp命令,将当前服务器上的 [参数4] 复制到对应服务器 src_svr(参数1) 【new_dir_full】 目录下:
# scp -r ${src_dir_full} ${src_svr_user}@${src_svr}:${new_dir_full}
# 自动输入密码(免去两次输入服务器密码):src_svr_pwd(参数3)
# 超时时间:timeout(参数6) 86400秒
# 在外面写好脚本丢到linux上之后,执行:dos2unix scp.sh
# 例如在linux服务器执行(后台执行):nohup sh -x ./scp.sh 122.1.1.1 root Osroot /approot1/test.tar /approot1 86400 > ./scp.log 2>&1 &
src_svr=$1
src_svr_user=$2
src_svr_pwd=$3
src_dir=$4
src_new_dir=$5 # 移动到新目录下
timeout=$6 # 单位:秒
src_dir_full=${src_dir}
new_dir_full=${src_new_dir}
#tar_dir="/approot1"${src_dir_full}"/.."
# if [ ! -d ${tar_dir} ];then
# mkdir -p ${tar_dir}
# fi
echo "begin:"`date "+%Y-%m-%d %H:%M:%S"`
expect -c "
set timeout ${timeout};
spawn scp -r ${src_dir_full} ${src_svr_user}@${src_svr}:${new_dir_full};
expect {
\"*yes/no*\" {send \"yes\r\"; exp_continue}
\"*password*\" {send \"${src_svr_pwd}\r\";}
\"*Password*\" {send \"${src_svr_pwd}\r\";}
}
expect eof;"
echo "end:"`date "+%Y-%m-%d %H:%M:%S"`
echo 0
二、转换unix格式
脚本写好后扔到源Linux服务器上,执行命令以下命令将文件转为unix格式
(否则在执行nohup命令后,查看scp.log日志发现scp命令中带有\r)
dos2unix scp.sh
三、执行脚本
在源Linux服务器控制台执行nohup命令
下面语句:将源服务器approot1目录下的test.tar文件 传输到 目标服务器:122.1.1.1 的approot1目录下
目标服务器登录账号和密码:root/Osroot
如此命令可以避免两次输入目标服务器root用户的密码
结果可以在scp.log中查看
nohup sh -x ./scp.sh 122.1.1.1 root Osroot /approot1/test.tar /approot1 86400 > ./scp.log 2>&1 &
Ps:脚本可以根据需要进行修改,主要修改scp.sh中的spawn命令,同时nohup也需要进行修改;也可以直接在xshell中执行scp命令进行调试,调试成功后再替换spawn命令。
spawn scp -r ${src_dir_full} ${src_svr_user}@${src_svr}:${new_dir_full}