通过shell脚本实现读取文件新增的每一行并追加到另一台服务器的文件末尾
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过shell脚本实现读取文件新增的每一行并追加到另一台服务器的文件末尾相关的知识,希望对你有一定的参考价值。
写个shell或per脚本,以后台进程方式运行,实现下面的功能:
当A服务器/var/A.log文件新增每一行时(从文件末尾读取),读取后logger或其它方式追加到IP为x.x.x.x的服务器上的/var/B.log文件中(B.log是linux系统syslogd进程产生的文件)。
往A.log写入的文本量不太大,如果24小时实时性较差,在B可能收集不到A最实时、关键的一部分log信息,其实从A.log中读取的信息也是有选择性的(用grep),尽管读取新增的每一行,但并不是把所有的都发送到B.log上去。
追答我先说一下我的思路,这个任务我分成两个部分,首先执行脚本扔到后台,你也可以用while来控制时间检测,不过我还是喜欢用cron来控制任务。假设我cron设置每一分钟执行一次A.sh 通过对比总行数和增加的行数判断文件是否更新(这个总行数最好手动添加,怎么添加你自己随意),如果增加了,就截取增加那部分的行数进行grep,grep后的内容写入/home/file这个文件里,然后上传file到B服务器.B也可以用cron控制,每1分钟检查一下是否有file这个文件,如果有就把内容写到B机的/tmp/file里,然后删除file这个文件。
#总行数
#ELINES=`wc -l /home/file
scp /home/file root@192.168.13.100:/tmp/
fi
#B上的脚本B.sh
FILE=file
if [ -f $FILE ]
then
cat $FILE >> /tmp/file
rm -rf $FILE
fi
shell读取文件的每一行
shell读取文件的每一行
写法一:
----------------------------------------------------------------------------
#!/bin/bash
while read line
do
echo $line
done < filename(待读取的文件)
----------------------------------------------------------------------------
写法二:
----------------------------------------------------------------------------
#!/bin/bash
cat filename(待读取的文件) | while read line
do
echo $line
done
----------------------------------------------------------------------------
如果有需要输出含指定字符的行,可以写成
----------------------------------------------------------------------------
#!/bin/bash
cat filename(待读取的文件) | grep word(指定字符) | while read line
do
echo $line
done
----------------------------------------------------------------------------
写法三:
----------------------------------------------------------------------------
for line in `cat filename(待读取的文件)`
do
echo $line
done
----------------------------------------------------------------------------
说明:
for逐行读和while逐行读是有区别的,如:
file文件内容如下:
$ cat file
1111
2222
3333 4444 555
$ cat file | while read line; do echo $line; done
1111
2222
3333 4444 555
$ for line in $(<file); do echo $line; done
1111
2222
3333
4444
555
本文出自 “大喵下山” 博客,请务必保留此出处http://damiao.blog.51cto.com/8194496/1913687
以上是关于通过shell脚本实现读取文件新增的每一行并追加到另一台服务器的文件末尾的主要内容,如果未能解决你的问题,请参考以下文章
Shell实现以下功能: 通过关键词匹配到文件某一行,并在这一行末尾追加内容。