Except that Nginx is asynchronous, not threaded. This means that when
your script is called, Nginx will now be delayed while the script is
launched (and what if the script fails?).
Nginx will just have to wait until fork returns.
I don’t know much about this stuff, but isn’t there a way to fork
something as a background process? Something equivalent to me typing
“./my_failover_script &” ? So assuming nginx could simply make a shell
system call or somehow make the call but tell it to run in the
background, then I imagine the nginx thread that would call out to run
the script would return almost immediately. At any rate, even if it
took a little time, this should be a rare event, like maybe once every
few weeks if things are running smoothly.
And if it can’t be launched as a background process, I would simply make
the script it calls do something like flag another process to run, and
then exit immediately so the thread returned quickly. The main thing is
that I just need nginx to signal me somehow when it takes an upstream
server out of rotation. Doing this by sniffing the log file is a hack
For the OP, executing a script when a backend fails is trivial, it
should be possibile to do it just be adding a new module.
Yes I had a look at the tutorial on building modules. Unfortunately it
is over my head. This is why I am hopeful that the developers will
recognize the importance of such a “hook” to an external monitoring
system would be very useful especially if it is straight-forward to do.
Be a better friend, newshound, and
know-it-all with Yahoo! Mobile. Try it now.