通过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进程产生的文件)。

我觉得你这个思路不好,按照你的想法,每增加一条,就需要运行一个往x.x.x.x服务器上发送一次的sh,如果A.log同时写入100,200,300,1000条你想过是什么概念吗?除了浪费了系统资源,还占用了连接带宽。所以实时更新我觉得这个思路不好。我建议按天比如24小时,上传一次a.log。追问

往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

参考技术A 8)脚本 script。sh 内7容如下o: #!。bin。bash while true do echo "一s条信息" >>file。txt sleep 100 done 0)赋予3可执行权限 chmod +x script。sh 5)后台执行脚本 script。shyS蟥yS蟥xa∝タe┯a∝タcwn′m四郅

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读取文件的每一行内容并输出

Shell实现以下功能: 通过关键词匹配到文件某一行,并在这一行末尾追加内容。

shell:读取文件的每一行内容并输出

shell脚本怎样读取文件的值,并赋值给变量

如何通过读取shell脚本中的csv文件来将2列的总和添加到新列中

shell读取文件的每一行