Feature request: Run a script when upstream detected down/up

Rt Ibmer rtibmx at yahoo.com
Wed Apr 30 00:41:53 MSD 2008

>> if (fork() == 0)
>  > execl("/bin/sh","/path/to/upstream_down.sh","ID of down upsteam 
>>goes here", NULL);

>It's not as easy to do.

At a high level, what am I missing / oversimplifying?

Perhaps instead, a simpler and more efficient approach may be for me to write to a log when nginx stops routing requests to an upstream box.  I cannot use the events it logs current, because it doesn't differentiate between a failed attempt vs. enough failed attempts based on max_fails and fail_timeout.

For instance it'll write to the log saying a connection or timeout occurred with an upstream, but does not record an entry saying that this has occurred max_fails times and it is now taking that upstream out of rotation for fail_timeout duration.  I think at a minimum even if nothing further is done here it should at least report that event in the logs.  Also I may be mistaken but I believe the current logging it does in this regard is only seen with like "notices" - I would expect those to get a high level logging priority like error or critical.

>Well, from my point of view your solution is not good engineering and not in the

That does not surprise me at all! This is over my head for sure. All I know is that I disparately need to know when nginx stops routing requests to an upstream.  And the only way to know 100% sure that its doing so is for nginx to tell us, not to try and determine what nginx must be seeing based on some external monitoring.

>I don't believe Igor is likely to call fork() to execute a script in response to
>an event in its code.

Agree it is lousy! :) At the same time, for an event that (hopefully) happens very rarely I wouldn't mind the couple of second hit from inefficiency here.  That being said clearly better solutions can be engineered (just not be my unfortunately).

>As I'm not a completely negative guy ;-) I propose a more general solution to
>monitor Nginx cleanly and to do whatever your want.

That is an excellent idea! Basically some sort of event / hook system that nginx can use to report various events (including "upstream down" and "previously detected downed ppstream now back up").

>The script/agent will just read the shared memory and act according to data.

Perfect! I just need the hook.

Thank you for your consideration and I hope these discussions help make in incredible product even more robust.

Be a better friend, newshound, and 
know-it-all with Yahoo! Mobile.  Try it now.  http://mobile.yahoo.com/;_ylt=Ahu06i62sR8HDtDypao8Wcj9tAcJ

More information about the nginx mailing list