I have some logs being generated using a timed rotating file logger. This logs to a file called tool.log, and at midnight, moves this to tool.log.<date> and starts a new tool.log.
I have a tail -f tool.log running on the machine to keep an eye on the logs, but at midnight, when tool.log is renamed to tool.log.<date>, tail continues to watch the renamed file.
What I'm hoping for is a tool that is similar to tail, but will continue to monitor the file named tool.log, rather than following the inode.
Does something like this exist? If not, I can write my own in Python for this purpose.
6 Answers
Some implementations of tail have an option for this; here's the description from the man page for GNU tail:
-F
same as--follow=name --retry
-f,--follow[={name|descriptor}]
output appended data as the file grows;-f,--follow, and--follow=descriptorare equivalent
--retry
keep trying to open a file even when it is or becomes inaccessible; useful when following by name, i.e., with--follow=name
As this option isn't specified by POSIX, you can't depend on it everywhere. Some known implementations:
- GNU - has
-Fas described above - Mac OS X, FreeBSD and NetBSD - have a similar
-Foption with the same effect - OpenBSD -
-fis enough (if the file is replaced (i.e., the inode number changes), tail will reopen the file and continue) - Solaris - no equivalent
- Busybox -
-Fis available in recent versions, but must be compiled withENABLE_FEATURE_FANCY_TAIL(it's not compiled-in by default)
Alternative is tail -F command.
The -F option implies --follow=name with --retry option, so tail is watching your file even if it has been deleted and created again.
Since you have asked for alternative:
The less utility could be an alternative for tail -F.
It will have to be run as follows: less --follow-name filename.log and press Shift + F.
This will give you same results as tail -F.
Another alternative would be to use the watch command, which will repeat any command every n seconds, every 2 seconds in this example:
watch -n2 "tail tool.log"Use Ctrl+C to quit the command when you're finished viewing the log.
2lnav is another fantastic tool that follows the filename.
You can also point it to a directory and it will tail all the files in that directory, in addition to all kinds of other neat features.
2I'm not sure if multitail will handle your specific case, but I bet it does. multitail does pretty much everything you could want tail to do.