通过shell脚本实现读取文件新增的每一行并追加到另一台服务器的文件末尾
写个shell或per脚本,以后台进程方式运行,实现下面的功能:当A服务器/var/A.log文件新增每一行时(从文件末尾读取),读取后logger或其它方式追加到IP为...
写个shell或per脚本,以后台进程方式运行,实现下面的功能:
当A服务器/var/A.log文件新增每一行时(从文件末尾读取),读取后logger或其它方式追加到IP为x.x.x.x的服务器上的/var/B.log文件中(B.log是linux系统syslogd进程产生的文件)。 展开
当A服务器/var/A.log文件新增每一行时(从文件末尾读取),读取后logger或其它方式追加到IP为x.x.x.x的服务器上的/var/B.log文件中(B.log是linux系统syslogd进程产生的文件)。 展开
2个回答
展开全部
我觉得你这个思路不好,按照你的想法,每增加一条,就需要运行一个往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
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询