fix: suppress noisy gevent SystemExit traceback on shutdown

When stopping gunicorn with Ctrl+C, the gevent worker's handle_quit()
calls sys.exit(0) inside a greenlet, causing gevent to print a
SystemExit traceback. Add a gunicorn config with post_worker_init hook
that marks SystemExit as a non-error in gevent's hub.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Smittix
2026-02-28 21:31:01 +00:00
parent c1339b6c65
commit 2de592f798
2 changed files with 19 additions and 0 deletions

18
gunicorn.conf.py Normal file
View File

@@ -0,0 +1,18 @@
"""Gunicorn configuration for INTERCEPT."""
def post_worker_init(worker):
"""Suppress noisy SystemExit tracebacks during gevent worker shutdown.
When gunicorn receives SIGINT, the gevent worker's handle_quit()
calls sys.exit(0) inside a greenlet. Gevent treats SystemExit as
an error by default and prints a traceback. Adding it to NOT_ERROR
silences this harmless noise.
"""
try:
from gevent import get_hub
hub = get_hub()
if SystemExit not in hub.NOT_ERROR:
hub.NOT_ERROR = hub.NOT_ERROR + (SystemExit,)
except Exception:
pass

View File

@@ -126,6 +126,7 @@ if [[ "$HAS_GUNICORN" -eq 1 && "$HAS_GEVENT" -eq 1 ]]; then
echo "[INTERCEPT] Listening on ${HOST}:${PORT}"
GUNICORN_ARGS=(
-c "$SCRIPT_DIR/gunicorn.conf.py"
-k gevent
-w 1
--timeout 300