最近网络卡炸,跨地域拷贝大文件非常慢,于是搞了一个每天凌晨自动拷贝的脚本,实现比较简单,主要是结合crontab实现周期性执行脚本。
- 直接上脚本源码
#/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。