Chinaunix

标题: tail监控文件的问题 [打印本页]

作者: conall    时间: 2013-10-29 15:28
标题: tail监控文件的问题
用tail -f 1.txt监测文件1.txt的变化,但当文件1.txt删除或重建时,tail -f 1.txt就无法监测文件1.txt的变化
tail -F又不支持,请问各位前辈有什么变通的方法?
例如:
> cat 1.txt
aaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbb
aaaaaaaaaaaaaaaaaa

> tail -f 1.txt
aaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbb
aaaaaaaaaaaaaaaaaa

ccccccccccccccccccc

但当文件1.txt删除或重建时,tail -f 1.txt无任何变化
>cat 1.txt | sort -u -o 1.txt
aaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbb
aaaaaaaaaaaaaaaaaa

ccccccccccccccccccc





作者: Shell_HAT    时间: 2013-10-29 15:32
不要删除或重建1.txt,有需要的时候清空它的内容,这样行吗?
作者: conall    时间: 2013-10-29 15:45
1、文件清空了,历史的数据也就丢了——我不想丢失历史数据
2、即便清空(如下),请问如何清空
> cat 1.txt | sort -u > 1.txt
1.txt: File exists.
> cat 1.txt | sort -u !> 1.txt
1.txt: File exists.
作者: conall    时间: 2013-10-29 15:45
1、文件清空了,历史的数据也就丢了——我不想丢失历史数据
2、即便清空(如下),请问如何清空
> cat 1.txt | sort -u > 1.txt
1.txt: File exists.
> cat 1.txt | sort -u !> 1.txt
1.txt: File exists.
作者: waker    时间: 2013-10-29 16:26
文件被删除重建的前后本来就是两个文件,只是名字碰巧相同而已
作者: conall    时间: 2013-10-29 16:32
回复 5# waker

是的,那在这种情况下,如果监测这个文件呢?


   
作者: waker    时间: 2013-10-29 16:37
你本来就正在监测这个文件啊,只是指向它的目录项之一没有了而已
作者: conall    时间: 2013-10-29 16:40
回复 7# waker

说白了,
就是怎么样实现
>tail -f 1.txt
手工中断tail -f 1.txt,然后再
>tail -f 1.txt
不断循环这个过程,保证1.txt无论怎么变,只有1.txt文件名没有变化,那么最新的内容都会呈现在页面中

   
作者: waker    时间: 2013-10-29 16:53
回复 8# conall


    比如你的文件本来有5行,如果你追加了1行,那么tail将显示第6行
请问如果你清空文件再写入3行,那么tail将显示哪些行?你想要什么结果想清楚没有?
作者: Shell_HAT    时间: 2013-10-29 16:56
回复 3# conall


一般是这样做:
  1. cp 1.txt 1_20131029.txt
  2. >1.txt
复制代码

作者: conall    时间: 2013-10-29 16:58
1.txt怎么变化,监控页面就怎么变化
比如,
如果> cat 1.txt
aaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbb
aaaaaaaaaaaaaaaaaa
那么,> tail -f 1.txt
aaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbb
aaaaaaaaaaaaaaaaaa

ccccccccccccccccccc
如果>cat 1.txt
aaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbb
aaaaaaaaaaaaaaaaaa

ccccccccccccccccccc
那么,> tail -f  1.txt
aaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbb
aaaaaaaaaaaaaaaaaa

ccccccccccccccccccc
作者: conall    时间: 2013-10-29 17:00
说错了,重新说哈
如果> cat 1.txt
aaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbb
ccccccccccccccccccc
aaaaaaaaaaaaaaaaaa
那么,> tail -f 1.txt
aaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbb
ccccccccccccccccccc
aaaaaaaaaaaaaaaaaa

如果,> cat 1.txt
aaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbb
ccccccccccccccccccc
那么,>tail -f 1.txt
aaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbb
ccccccccccccccccccc

作者: bikong0411    时间: 2013-10-30 09:29
监控的话用inotify吧
作者: conall    时间: 2013-10-30 09:38
回复 13# bikong0411

请赐教具体用法,谢谢


   
作者: bikong0411    时间: 2013-10-31 09:13
回复 14# conall


    网上有教程
作者: conall    时间: 2013-10-31 11:54
F=`ls -ltr  | grep 1.txt | awk '{print $9}'`;if [ $F != "" ];then while : ;do clear ;tail $F;sleep 300;done;fi
谢谢,我自己研究解决了




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2