对rsync进行封装的shell脚本
抓取
#!/bin/bash . push.sh # 错误处理:尝试查找备份文件
function onError()
{
local errFile="err"
local serverInfo=($ $ $) # ip username password
local logInfo=($ $) # srcPath destPath local srcPath=${logInfo[]}
logInfo[]="disk1/"${srcPath##*/}".gz" #备份文件路径
logInfo[]=${logInfo[]}".gz" push ${serverInfo[*]} ${logInfo[*]} $errFile if [ -s $errFile ]; then
echo "the file ${logInfo[0]} was not found"
fi
} # 抓取指定日期指定时间的日志文件
function catchLogByHour()
{
local errFile="err"
local serverInfo=($ $ $) # serverInfo=(ip username password)
local logInfo=($ $) # logInfo=(srcPath destPath)
local endHour=$ local i=
while [ $i -le $endHour ];
do
hour=$i
if [ $hour -lt ]; then
hour=""$hour
fi local hourLogInfo
hourLogInfo[]=${logInfo[]}"."$hour
hourLogInfo[]=${logInfo[]}"."$hour push ${serverInfo[*]} ${hourLogInfo[*]} $errFile if [ -s $errFile ]; then
onError ${serverInfo[*]} ${hourLogInfo[*]}
fi i=`expr $[$i+]`
done
} # for test
# logDate=""
# serverInfo=([]="172.18.11.200" []="log" []="wappplog")
# logInfo=([]="logs/syslog/project_log."$logDate []="./data/project_log."$logDate []="")
# catchLogByHour ${serverInfo[*]} ${logInfo[*]}
推送
#!/bin/bash MAX_RE_CONNECT=
SLEEP_TIME= # 实际推送动作
function pushAction()
{
local ip=$
local user=$
local password=$ local path=$
local localPath=$
local error=$ :>$error # 清空文件相当于rm,touch命令
export RSYNC_PASSWORD="$password"
rsync -Cavz $user@$ip::$path $localPath > $error >& # 判断是否发送错误
grep "rsync error" $error > $error"_copy"
cp $error"_copy" $error
rm -f $error"_copy"
} # 失败重新尝试,一旦超过最大尝试次数认为无法完成
function push()
{ local serverInfo=($ $ $) # ip username password
local logInfo=($ $) # srcPath destPath
local error=$ local i=
while [ $i -lt $MAX_RE_CONNECT ]
do
pushAction ${serverInfo[*]} ${logInfo[*]} $error # no error
if [ ! -s $error ]; then
break
fi echo "try again..."
sleep $SLEEP_TIME
i=`expr $[$i+]`
done
} # for test
# serverInfo=([]="172.18.11.201" []="log" []="wappplog")
# fileInfo=([]="logs/syslog/project_log.20131229.16" []="./lishujun.log" []="aaa")
# push ${serverInfo[*]} ${fileInfo[*]}
main.sh
#! /bin/sh cd `dirname $` . catch.sh if [ $# -eq ]; then
# 取昨天数据
logDate=`date -d"1 day ago" +'%Y%m%d'`
hour=
else
# 取指定日期时间 today=`date +'%Y%m%d'`
logDate=$
if [ "$1" == "$today" ]; then
# 取当天数据已产生的数据
hour=`date -d "1 hour ago" +"%H"`
else
# 取历史数据
hour=
fi
fi mkdir -p "./logs/project/$logDate"
serverInfo=([]="172.18.10.104" []="stat" []="3gppstat")
logInfo=([]="logs/project/project_log."$logDate []="./logs/project/$logDate/project_log."$logDate []=$hour)
catchLogByHour ${serverInfo[*]} ${logInfo[*]}
对rsync进行封装的shell脚本的更多相关文章
- Shell脚本中执行mysql的几种方式(转)
Shell脚本中执行mysql的几种方式(转) 对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用 ...
- Shell脚本中执行sql语句操作mysql
对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考.对于脚本输出的 ...
- Shell脚本中执行sql语句操作mysql的5种方法【转】
对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考.对于脚本输出的 ...
- SHELL脚本中执行SQL语句操作MYSQL的5种方法
对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考.对于脚本输出的 ...
- Shell脚本:使用rsync备份文件/目录
本文我们介绍一个shell脚本,用来使用rsync命令将你本地Linux机器上的文件/目录备份到远程Linux服务器上.使用该脚本会以交互的方式实施备份,你需要提供远程备份服务器的主机名/ip地址和文 ...
- 通过在shell脚本中用scp或rsync实现远程同步文件
通过在shell脚本中用expect实现远程scp文件 shell expect的简单用法 http://myunix.blog.51cto.com/191254/1095074 http://ji ...
- shell脚本 inotify + rsync 同步脚本
1.这是很简单的一个 文件监控+触发同步脚本 监控一台服务器下的一个文件夹,发生改变则向另一个个文件夹进行同步. 具体的inotify命令 rsync命令 可以看linux分类下的介绍 inoti ...
- Linux shell脚本编程(三)
Linux shell脚本编程 流程控制: 循环语句:for,while,until while循环: while CONDITION; do 循环体 done 进入条件:当CONDITION为“真” ...
- 【转】70个经典的 Shell 脚本面试问题
我们为你的面试准备选择了 70 个你可能遇到的 shell 脚面问题及解答.了解脚本或至少知道基础知识对系统管理员来说至关重要,它也有助于你在工作环境中自动完成很多任务.在过去的几年里,我们注意到所有 ...
随机推荐
- 基于前端javascript的搜索功能
发表于 2013/11/07 当在数据量不是很大,而且没有后端对应的功能接口的时候,一些简单的搜索功能基本上是前端去实现的,正好最近用到,写了一个,贴出来和大家分享: 功能描述: 按下键盘后及时搜索条 ...
- UVA 297 Quadtrees(四叉树建树、合并与遍历)
<span style="font-size: 18pt; font-family: Arial, Helvetica, sans-serif; background-color: r ...
- Hrbust1328 相等的最小公倍数 (筛素数,素因子分解)
本文出自:http://blog.csdn.net/svitter/ 题意: 求解An 与 An-1是否相等. n分为两个情况-- 1.n为素数, 2.n为合数. = =好像说了个废话..素数的时候 ...
- Qt学习之路(34): 国际化(下)
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://devbean.blog.51cto.com/448512/245063 上次 ...
- PCAP 抓包
PCAP是一个数据包抓取库, 很多软件都是用它来作为数据包抓取工具的. WireShark也是用PCAP库来抓取数据包的.PCAP抓取出来的数据包并不是原始的网络字节流,而是对其进行从新组装,形成一种 ...
- android开发之自定义AutoCompleteTextView
AutoCompleteTextView,很多人都用过,有些情况下使用Google提供的ArrayAdapter作为适配器就可以完成需求,但是在实际开发中,我们经常需要开发自定义适配器来完成开发工作. ...
- Bash判断文件夹(目录)是否存在
#!/bin/bash if [ -d DirName ]; then echo 'Dir exist' else echo 'Dir not exist' fi
- 苹果手机 iframe 无法滚动bug
原来在html5下,iframe 只有 src 属性scroling='no' 解决办法:在iframe外加一层第div,设置样式-webkit-overflow-scrolling:touch;ov ...
- html通用导航条制作
第一步:先创建一个盒子,定义类为 nav,width 1000,height 40px,防京东的导航,与浏览器顶部100px,margin-top:100px,看的更直观 第二步:使用无序列表放置,导 ...
- (转)Spring读书笔记-----Spring核心机制:依赖注入
Java应用(从applets的小范围到全套n层服务端企业应用)是一种典型的依赖型应用,它就是由一些互相适当地协作的对象构成的.因此,我们说这些对象间存在依赖关系.加入A组件调用了B组件的方法,我们就 ...