How do I tail a log file and keep tailing it when the latest one changes date?

I’m using RHEL 4.

The normal tail -F file_name*.log doesn’t update when the time flips over to 0000.

Here’s what I’ve tried so far from searching the web, both of which try to use nested tail:

tail -F $(ls -tr file_name*.log | tail -n 1)

tail -F $(fine . -maxdepth 1 -type f -printf "%T@ %pn" | sort -n | tail n 1 | cut -d' ' -f 2-)

None of these flip over to new files. Plain old tail -F file_name*.log works in my small test cases (while the 2 above don’t), but it doesn’t work when I’m tailing a real log file.

Asked By: Ken Oh


This won’t (can’t) work – the sub-shells you’re using to determine the latest file only get executed once. The glob won’t work because the shell evaluates the wild-card only ONCE.

One way to deal with it would be to use ‘watch’ to run the whole thing, but that would hack up the output every so many seconds.

Answered By: tink

You’re probably going to have to write something to follow tail. Or configure your system to not roll logs (or that log) at midnight. Either way, the filehandle of the tailed logfile is reset when it’s rolled.

Answered By: Mark Cohen

tail monitors a single file, or at most a set of files that is determined when it starts up. In the command tail -F file_name*.log, first the shell expands the wildcard pattern, then tail is called on whatever file(s) exist at the time.

To monitor a set of files based on wildcards, you can use multitail.

multitail -iw 'file_name*.log' 1
Categories: Answers Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.