Linux实现周期性定时远程拷贝文件

最近网络卡炸,跨地域拷贝大文件非常慢,于是搞了一个每天凌晨自动拷贝的脚本,实现比较简单,主要是结合crontab实现周期性执行脚本。

  1. 直接上脚本源码
#/bin/bash
echo "检查CentOS6.4的rpm包"

# 获取192.188.1.100服务器对于目录下包含当前时间的文件路径
server_rpm_path=$(ssh 192.188.1.100 "find /rpm/`date '+%Y-%m-%d'/*`")

# 获取192.188.1.100服务器对于目录下的文件名称
server_rpm_name=$(ssh 192.188.1.100 "ls -lR /rpm/`date '+%Y-%m-%d'`"|awk '{print $9}'|tail -1)

# 获取192.188.1.100服务器对于目录下的文件的MD5值
server_rpm_md5=$(ssh 192.188.1.100 "md5sum $server_rpm_path" |awk -F " " '{print $1}')

echo "    远端最新rpm包的md5为:$server_rpm_md5"

# 获取本地的rpm包路径、名称、MD5值
local_rpm_path=`ls /root/6.4/rpm*|tail -1`
local_rpm_name=`ls /root/6.4/rpm*|tail -1|awk -F "/" '{print $3}'`
local_rpm_md5=`md5sum $local_rpm_path|awk -F " " '{print $1}'`
echo "    本地最新rpm包的md5为:$local_rpm_md5"

# 将远端的rpm与本地的rpm MD5值进行对比,若相同,则不更新,若不同,则更新
if [ "$server_rpm_md5" = "$local_rpm_md5" ];then
    echo "    本地rpm包与最新rpm包一致,不更新rpm包"
elif [ $server_rpm_md5 != $local_rpm_md5 ];then
    echo "    文件不一致,开始更新"
        mv -f $local_rpm_path /root/all6.4
        rpm_number=`ls /root/all6.4/*.rpm|wc -l`
        if [ $rpm_number -gt 5 ]
            then
            path=`ls -lR /root/all6.4/*.rpm|awk '{print $9}'|head -1`
                        rm -rf $path
        fi
    nohup scp -r root@192.168.1.100:$server_rpm_path /root/6.4/ &

# 获取传输的百分比
    number=0
    while [ $number -lt 1 ]
    do
       server_rpm_size=$(ssh 192.188.1.100 "ls -lR $server_rpm_path"|awk '{print $5}'|tail -1)
       local_rpm_size=$(ls -l /root/6.4/rpm* |awk -F " " '{print $5}')
       process=$(printf "%d" $((local_rpm_size*100/server_rpm_size)))
       process1=$(printf "%d%%" $((local_rpm_size*100/server_rpm_size)))
       echo -ne "$process1\r"
       if [ $process -eq 100 ]
       then
          break
       fi
    done
    local_newrpm_path=`ls /root/6.4/rpm*|tail -1`
    local_newrpm_name=`ls /root/6.4/rpm*|tail -1|awk -F "/" '{print $4}'`
    local_newrpm_md5=`md5sum $local_newrpm_path|awk -F " " '{print $1}'`
# 检查更新后本地rpm是否与远端rpm的md5一致
    if [ "$server_rpm_md5" = "$local_newrpm_md5" ];then
        echo "    远端最新rpm包的md5为:$server_rpm_md5"
        echo "    本地最新rpm包的md5为:$local_newrpm_md5"
        echo "    更新完成"
    elif [ "$server_rpm_md5" != "$local_newrpm_md5" ];then
        echo "    远端最新rpm包的md5为:$server_rpm_md5"
        echo "    本地最新rpm包的md5为:$local_newrpm_md5"
        echo "    更新失败"
    fi
fi

`ps -ef | grep scp | grep -v grep | cut -c 9-15  | xargs kill -9` >/dev/null

至此,整个过程完成了50%

接下来,我们配置crontab,实现周期性执行上述脚本

先介绍一下crontab命令,来点官方话

crontab命令的功能是在一定的时间间隔调度一些命令的执行。在/etc目录下有一个crontab文件,这里存放有系统运行的一些调度程序,每个用户可以建立自己的调度crontab。
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

只愿人间无白头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值