gunicorn 命令该怎么写?工厂函数怎么传?配置有几个来源、谁覆盖谁?不重启服务怎么调 worker 数?这篇用真实的 gunicorn 把每种写法与信号的结果跑一遍。
app:app(模块级的 app 变量) → {"name":"module-level","pid":62361}
"app:create_app()"(调用工厂) → {"name":"default","pid":62365}
"app:create_app('prod')"(带参数的工厂) → {"name":"prod","pid":62367}
模块不存在 → 退出,['[2026-10-02 15:26:09 +0800] [62369] [ERROR] Shutting down: Master', '[2026-10-02 15:26:09 +0800] [62369] [ERROR] Reason: Worker failed to boot.']
变量不存在 → 退出,['[2026-10-02 15:26:11 +0800] [62385] [ERROR] Shutting down: Master', '[2026-10-02 15:26:11 +0800] [62385] [ERROR] Reason: App failed to load.']只有配置文件 → worker 进程数 3 GUNICORN_CMD_ARGS 里写 --workers 2 → worker 进程数 2 命令行 -w 1(同时有上面两者) → worker 进程数 1
curl --unix-socket → {"name":"module-level","pid":62449} | socket 文件权限: 0o777启动:worker 2 个 发 SIGTTIN 后: 3 个 发 SIGTTOU 后: 2 个 发 SIGHUP 后:2 个,其中与 HUP 之前相同的 pid 0 个(旧 worker 被换掉了)
合法:退出码 0 变量不存在:退出码 1 | ["gunicorn.errors.AppImportError: Failed to find attribute 'nosuch' in 'app'."]