分享

Linux 使用scp命令定时将文件备份到另一台服务器

 爱吃鱼的俊懒猫 2020-05-21

主要思路就是使用scp命令 + linux定时执行任务。
目标:2台服务器,A为主服务器,B为备份服务器,需要每天中午12点将A上的文件备份到B上。
1.首先在A上安装except
一路yes下去即可

yum install expect

2.编写脚本
这里给个示例
要传的文件在A服务器的/home/20181025/目录下

filepath=/home/20181025/
echo "`date +%Y%m%d` start upload......"
echo "`date +%Y%m%d` start upload......" > /home/import.log

sleep 5s

#B服务器所用账号的密码
password='**********'

echo "start copy datafile from remote path..."
echo "start copy datafile from remote path..." >> /home/import.log

/usr/bin/expect <<EOF
#设置超时时间
set timeout 10
#-r 为 递归复制整个目录,即现在会将/home/20181025/整个文件夹拷贝过去
#-p 为保留源文件权限
#顺便提下 -P 22 可以修改传输端口,不写默认为22
#root为B上的用户账号
#/home/ 为传输到的目录,即A上的/home/20181025/整个文件夹会被放到B上的/home/文件夹下
spawn scp -r -p $filepath root@xx.xx.xx.xx:/home/
expect "*assword:"
send "$password\r"
send "exit\r"
expect eof
EOF

if [ $? = 0 ]; then
        echo "datafile copy successful!"
        echo "datafile copy successful!" >> /home/import.log
else
        echo "datafile copy failed!"
        echo "datafile copy failed!" >> /home/import.log
fi

编写完脚本后上传到A上,当然直接在A上写的就省事了。

3.修改格式
如果你是在windows上编写的脚本,那么就需要注意上传到服务器上的脚本格式了.
这里假设脚本文件为 1.sh,上传到A上后的位置为 /home/1.sh
(1)进入编辑界面

vim /home/1.sh

(2)输入 :

:

可以看到最下方出现了一个 :

(3)输入 set ff 并回车

set ff

就可以查看到当前文件的格式了,如果不是unix而是dos的话就需要修改下格式了。
在这里插入图片描述

(4)修改格式
先输入

:

然后再

set ff=unix

回车,即可

4.修改脚本权限
相信这个不用多说

chmod 777 /home/1.sh

然后在执行脚本前需要我们手动执行下scp命令,因为第一次连接时需要进行授权。

5.授权
将你脚本中的scp 那一行拷贝出来

scp -r -p /home/20181025/ root@xx.xx.xx.xx:/home/

回车
按照提示输入密码和yes。顺便查看下文件夹是否传过去了,传过去了话就删了,下一步要测试脚本。

6.测试执行脚本

cd /home
./1.sh

看下脚本是否能正常执行
因为/home/20181025/ 文件夹中只有一个123.txt文件,所以如下方所示,传送成功,然后到B服务器的/home/ 目录下查看是否存在 /20181025/ 文件夹 和 /20181025/123.txt 文件。
在这里插入图片描述

恩,成功传过来了呢
在这里插入图片描述

然后看下A服务器上的/home/import.log 日志文件是否记录了日志。
在这里插入图片描述

7.计划任务
这里直接利用linux的计划任务

crontab -e

编辑文件,添加如下代码
代表每天12点执行一次1.sh脚本

00 12 * * * /home/1.sh

时间示例(可自行设置执行时间):
43 21 * * * 每天的21:43 执行

15 05 * * *    每天的05:15 执行

0 17 * * * 每天的17:00 执行

0 17 * * 1 每周一的 17:00 执行

0,10 17 * * 0,2,3 每周日,周二,周三的 17:00和 17:10 执行

0-10 17 1 * * 毎月1日从 17:00到7:10 毎隔1分钟 执行

0 0 1,15 * 1 毎月1日和 15日和 一日的 0:00 执行

42 4 1 * *     毎月1日的 4:42分 执行

0 21 * * 1-6   周一到周六 21:00 执行

0,10,20,30,40,50 * * * * 每隔10分 执行

*/10 * * * *        每隔10分 执行

  • 1 * * *         从1:0到1:59 每隔1分钟 执行

0 1 * * *         1:00 执行

0 */1 * * *        毎时0分 每隔1小时 执行

0 * * * *         毎时0分 每隔1小时 执行

2 8-20/3 * * *      8:02,11:02,14:02,17:02,20:02 执行

30 5 1,15 * *       1日 和 15日的 5:30 执行


10.30更新 修改脚本,添加是否授权部分。
filepath=/home/20181025/
echo "`date +%Y%m%d` start upload......"
echo "`date +%Y%m%d` start upload......" > /home/import.log

sleep 5

password='xxxxx'

echo "start copy datafile from remote path..."
echo "start copy datafile from remote path..." >> /home/import.log

/usr/bin/expect <<EOF
set timeout 10
spawn scp -r -p $filepath root@xx.xx.xx.xx:/home/
expect {
 "(yes/no)?"
 {
   send "yes\n"
   expect "*assword:" {send "$password\n"}
 }
 "*assword:"
 {
   send "$password\n"
 }
}
send "exit\n"
expect eof
EOF

if [ $? = 0 ]; then

        echo "datafile copy successful!"
        echo "datafile copy successful!" >> /home/import.log
else
        echo "datafile copy failed!"
        echo "datafile copy failed!" >> /home/import.log
fi

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多