对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 脚面问题及解答.了解脚本或至少知道基础知识对系统管理员来说至关重要,它也有助于你在工作环境中自动完成很多任务.在过去的几年里,我们注意到所有 ...
随机推荐
- 百度UEditor开发案例(JSP)
本案例的开发环境:MyEclipse+tomcat+jdk 本案例的开发内容: 用百度编辑器发布新闻(UEditor的初始化开发部署) 编辑已发过的新闻(UEditor的应用——编辑旧文章) ...
- Qt4--加密日记本(子例化QMainWindow文本加密解密)
近来刚学习Qt4编程,想找个实例练习练习,于是产生了一个想法,就是怎么样做一个文本加密,这样,自己保存的一些文档可以通过软件 生成加密文本,到时候要看的时候,通过自己的软件读取就可以.既然有想法了,那 ...
- Web Service实例——天气预报
上述只是模拟了一下服务端和本地端的通信,但是却没有涉及到真正获取其他网站信息的操作.现在我们通过一个案例,是关于获取天气预报,来实际掌握该项技能. 原本可以使用MyEclipse自动生成客户端,然后很 ...
- linux 进程综合指令
1. 查询当前机器运行的进程总数: ps -ef | wc -l ps -ef | grep httpd | wc -l 2. ulimit命令 表 1. ulimit 参数说明 选项 [option ...
- vlist java实现-转
转自:http://www.blogjava.net/changedi/archive/2012/04/15/374226.html vlist是一种列表的实现.结构如下图: (图来源wikipedi ...
- 编译安装 php 5.4.11
第一步 先下载 tzr.gz 的php源码包然后 tar zxvf php-5.4.11.tar.gz然后 cd php-5.4.11 然后复制如下编译代码 ./configure \--prefi ...
- codeforces 132C Logo Turtle(dp)
可以用三维dp来保存状态, dp[i][j][k]表示在前i个字符变换了j步之后方向为k(k = 1 or k = 0)的最优解,也就是离原点的最大距离.这里规定0方向为正方向,1位负方向,表示的是当 ...
- (转)javascript中的this
JavaScript中的this总是让人迷惑,应该是js众所周知的坑之一. 个人也觉得js中的this不是一个好的设计,由于this晚绑定的特性,它可以是全局对象,当前对象,或者…有人甚至因为坑大而不 ...
- 【转】Angular Input格式化
今天在Angular中文群有位同学问到:如何实现对input box的格式化.如下的方式对吗? <input type="text" ng-model="demo. ...
- Android 设计随便说说
我曾经搞过应用程序的设计,当时只是读了半本宝典<重构...>,现在看来就这半本九阴真经,收益甚多啊 .再加上这现年工作上的印证,基本上可以拿出喷一下了.当然现在看来当年的项目设计真是很烂了 ...