Forum: Ruby Prcoessing outoput from tail

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
555c1193071e97926fa67c038244c047?d=identicon&s=25 Phy Prabab (Guest)
on 2007-03-24 23:31
(Received via mailing list)
Hello,

I am trying to figure out how to perpetually process the output from a
file.  That is I continuously want to process output that is appended to
a file and that file could get rolled out at any time.  I use popen
w/tail, but this opens the file each time and I have to reprocess all
the files content.  Is there a better way to do this or a library that
would help me?  I know that I could probably open the file, tack
location, and watch the inode to make sure the file has not been rolled,
but that amounted to a lot of mistakes and I could never get it work
properly.

Thanks for the help!
Phy
19605c7ede229e507e894865308a6d53?d=identicon&s=25 Gustav Paul (Guest)
on 2007-03-24 23:42
(Received via mailing list)
Phy Prabab wrote:
>
> ____________________________________________________________________________________
> Now that's room service!  Choose from over 150,000 hotels
> in 45,000 destinations on Yahoo! Travel to find your fit.
> http://farechase.yahoo.com/promo-generic-14795097
>
Check out the file-tail gem:

http://file-tail.rubyforge.org/

Cheery-o,
Gustav Paul
753dcb78b3a3651127665da4bed3c782?d=identicon&s=25 Brian Candler (Guest)
on 2007-03-25 15:00
(Received via mailing list)
On Sun, Mar 25, 2007 at 07:30:33AM +0900, Phy Prabab wrote:
> I am trying to figure out how to perpetually process the output from a
> file.  That is I continuously want to process output that is appended to a
> file and that file could get rolled out at any time.

I guess this is a follow-on to this thread:
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/...

Have a look at using "tail -F=<filename>" or "tail -f=<filename>
--retry"
within popen.

Screen 1:
$ tail -F /tmp/foo
tail: cannot open `/tmp/foo' for reading: No such file or directory

Screen 2:
$ echo "abc" >/tmp/foo; sleep 3; mv /tmp/foo /tmp/foo2; echo "def"
>/tmp/foo

Now Screen 1 shows:

tail: `/tmp/foo' has appeared; following end of new file
abc
tail: `/tmp/foo' has been replaced; following end of new file
def

(read 'man tail' for more details. The above example is using tail 5.93
from
GNU coreutils, which comes with Ubuntu Linux 6.06)

> I know that I could probably open the file, tack location, and watch
> the inode to make sure the file has not been rolled, but that amounted to
> a lot of mistakes and I could never get it work properly.

Let 'tail -F=<filename>' do that for you :-)

Brian.
This topic is locked and can not be replied to.