We're using tail to continuously monitor several logs, but when a log is rotated the tail for that file will cease.
As far as I understand, the problem is that when the log is rotated, there is a new file created, and the running tail process doesn't know anything about that new file handle.
Ah, there's a flag for this.
instead of using
tail -f /var/log/file
we should be usingtail -F /var/log/file
tail -F
translates totail --follow=name --retry
as in;--follow=name
: follow the name of the file instead of the file descriptor--retry
: if the file is inaccessible, try again later instead of dyingFrom man tail:
So in this case using the
-F
option would be correct.The exact answer depends on your OS - but in many cases,
tail -F
will do the right thing.tail -F or tail --follow=name
IMHO, it's a little odd to change your log file by SIZE rather than by date. Most system logs (in unix or linux) rotate on a weekly or monthly basis, and not based on size...This is something I like for various reasons, and also something which, if implemented, would solve your problem.Eight years later, I don't know what the hell I was talking about here: there are tons of places where you want to rotate by size, because daily/weekly/monthly rotations can yield MASSIVE files which can cause serious issues.
From a more experienced perspective, the real question is why you'd want to sit and continuously tail a file that's growing so fast that you're rotating it more than daily...It'd be like watching the Matrix stream by.
These days you'd be better looking into some big data log aggregation like Splunk or Sumologic, where it can filter log events into classes and trigger based on specific log values...No need for watching live logs at all.
I use command on my production server:
Also, it might be a little too heavy-duty for your purposes, but splunk has a tail feature to do exactly what you want. It's free for up to 500 MB/day, but if your data is beyond that in size it wouldn't be worth the cost.