[tpm] Renaming a file with multiple scripts having opened filehandles on it
uri at StemSystems.com
Fri Oct 2 20:47:06 PDT 2009
>>>>> "LREQ" == Liam R E Quin <liam at holoweb.net> writes:
LREQ> On Fri, 2009-10-02 at 20:44 -0400, Madison Kelly wrote:
>> [...] I noticed that if a second program/thread
>> had an open file handle on the log file being 'rename'ed, it would
>> follow the log file to the new name. This makes sense, now that I think
>> of it (I am guessing it tracks the inode?).
LREQ> This is platform specific, but yes, on Unix-like systems, if you
LREQ> rename a file, something writing to that file will continue to write
LREQ> to it under the new name. On a Unix (and Linux) file system,
LREQ> the directory entries (e.g. for "/etc/group" I mean the "group"
LREQ> entry in the "/etc" directory) just point to where the data is
LREQ> stored - this is why when you use "ln group fizz", there are
LREQ> now two names for the same data, and if you remove either one,
LREQ> the other remains behind. This is different from symbolic links,
LREQ> ln -s, of course.
>> What I want to do though is have some way for other threads recognize
>> that the file name has changed.
LREQ> You'd have to notify them, e.g. with a shared variable or a signal of
LREQ> some sort.
this is also why the best loggers use a server to do the logging and the
programs send log message to it. then you only have one program opening
and writing to the log files and you can manage/rotate them
cleanly. having multiple processes logging to the same file is a poor
design. one other way around it besides a shared variable or such is to
mark the log dir with a flag file. this can be checked each time a
process wants to write to the log file. it will slow things down but
allow for the current design to work with log rotation.
Uri Guttman ------ uri at stemsystems.com -------- http://www.sysarch.com --
----- Perl Code Review , Architecture, Development, Training, Support ------
--------- Gourmet Hot Cocoa Mix ---- http://bestfriendscocoa.com ---------
More information about the toronto-pm