Feature request: Run a script when upstream detected down/up
Manlio Perillo
manlio_perillo at libero.it
Tue Apr 29 12:26:09 MSD 2008
Rt Ibmer ha scritto:
>>> 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 at best.
>
There are no problems at spawing an external process.
Simply, Nginx does not directly support this and you will get a lot of
NOTICE messages in the log when each process exits (even if it exits
with a success status code).
>> 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. Thank you.
>
Personally I'm not interested in this feature, sorry.
I have given a look in the Nginx source code and it seems that all you
want is implementable, and it should require only a few hours of coding.
Regards Manlio Perillo
More information about the nginx
mailing list