pid file handling issue
normalperson at yhbt.net
Thu Oct 24 00:53:17 UTC 2013
Michael Fischer <mfischer at zendesk.com> wrote:
> Hi everyone,
> While writing a script to determine the success or failure of a
> Unicorn reload attempt (without having to parse a log), I noticed that
> Unicorn doesn't preserve the timestamp of its pid file. In other
> words, instead of renaming pidfile to pidfile.oldbin (and then back
> again if the reload failed), it creates a new pid file for each master
> phase change.
> This means we cannot simply compare the mtime of the current pidfile
> against the time the USR2 signal was given in order to make a
> reasonable conclusion.
> I tried another method, which was to look at the start time of the
> process as reported by ps(1), but on Linux, that time does not come
> from the wall clock: it's derived from the number of jiffies since
> system boot. So it's not guaranteed to be accurate, especially if the
> wall clock was incorrect at system boot.
> Are there any other methods anyone can suggest? Otherwise, a change
> to Unicorn's behavior with respect to pid file maintenance would be
> kindly appreciated.
I read and stash the value of the pid file before issuing any USR2.
Later, you can issue "kill -0 $old_pid" after sending SIGQUIT
to ensure it's dead.
Checking the mtime of the pidfile is really bizarre...
OTOH, there's times when users accidentally remove a pid
file and regenerate by hand it from ps(1), too...
More information about the mongrel-unicorn