mirror of
https://github.com/frappe/gunicorn.git
synced 2026-01-14 11:09:11 +08:00
Commit 81241907ffcf94517ffa14b8427205906b61b540 changed the signal handling by switching the roles of `TERM` and `QUIT` for the arbiter so that `TERM` is graceful and `QUIT` is not. At the time, workers performed graceful shutdown on `QUIT` and quick shutdown on `TERM` and `INT`. This behavior was also changed so that `QUIT` (and `INT`) cause a quick shutdown and `TERM` is graceful. However, the documentation incorrectly reversed the roles of the worker signals and the arbiter was not updated to use the correct signals. This commit fixes the documentation and the arbiter signals.
114 lines
5.6 KiB
ReStructuredText
114 lines
5.6 KiB
ReStructuredText
.. _signals:
|
|
|
|
================
|
|
Signals Handling
|
|
================
|
|
|
|
A brief description of the signals handled by Gunicorn. We also document the
|
|
signales used internally by Gunicorn to communicate with the workers. With the
|
|
exception of TTIN/TTOU the signals handling match the behaviour of `nginx
|
|
<http://wiki.nginx.org/CommandLine>`_.
|
|
|
|
Master process
|
|
==============
|
|
|
|
- **QUIT**, **INT**: Quick shutdown
|
|
- **TERM**: Graceful shutdown. Waits for workers to finish their
|
|
current requests up to the *graceful timeout*.
|
|
- **HUP**: Reload the configuration, start the new worker processes with a new
|
|
configuration and gracefully shutdown older workers. If the application is
|
|
not preloaded (using the ``--preload`` option), Gunicorn will also load the
|
|
new version.
|
|
- **TTIN**: Increment the number of processes by one
|
|
- **TTOU**: Decrement the nunber of processes by one
|
|
- **USR1**: Reopen the log files
|
|
- **USR2**: Upgrade the Gunicorn on the fly. A separate **QUIT** signal should
|
|
be used to kill the old process. This signal can also be used to use the new
|
|
versions of pre-loaded applications.
|
|
- **WINCH**: Gracefully shutdown the worker processes when gunicorn is
|
|
daemonized.
|
|
|
|
Worker process
|
|
==============
|
|
|
|
Sending signals directly to the worker processes should not normally be
|
|
needed. If the master process is running, any exited worker will be
|
|
automatically respawned.
|
|
|
|
- **QUIT**, **INT**: Quick shutdown
|
|
- **TERM**: Graceful shutdown
|
|
- **USR1**: Reopen the log files
|
|
|
|
Reload the configuration
|
|
========================
|
|
|
|
the signal HUP can be used to reload the Gunicorn configuration on the
|
|
fly.
|
|
|
|
::
|
|
|
|
2013-06-29 06:26:55 [20682] [INFO] Handling signal: hup
|
|
2013-06-29 06:26:55 [20682] [INFO] Hang up: Master
|
|
2013-06-29 06:26:55 [20703] [INFO] Booting worker with pid: 20703
|
|
2013-06-29 06:26:55 [20702] [INFO] Booting worker with pid: 20702
|
|
2013-06-29 06:26:55 [20688] [INFO] Worker exiting (pid: 20688)
|
|
2013-06-29 06:26:55 [20687] [INFO] Worker exiting (pid: 20687)
|
|
2013-06-29 06:26:55 [20689] [INFO] Worker exiting (pid: 20689)
|
|
2013-06-29 06:26:55 [20704] [INFO] Booting worker with pid: 20704
|
|
|
|
|
|
Sending an **HUP** signal will reload the configuration, start the new
|
|
worker processes with a new configuration and gracefully shutdown older
|
|
workers. If the application is not preloaded (using the ``--preload``
|
|
option), Gunicorn will also load the new version.
|
|
|
|
Upgrading to a new binary on the fly
|
|
====================================
|
|
|
|
If you need to replace the gunicorn binary with a new one (when
|
|
upgrading to a new version or adding/removing server modules), you can
|
|
do it without any service downtime - no incoming requests will be
|
|
lost. Preloaded applications will also be reloaded.
|
|
|
|
First, replace old binary with a new one, then send **USR2** signal to the
|
|
master process. It renames its .pid file to .oldbin (e.g.
|
|
/var/run/gunicorn.pid.oldbin), then executes a new binary,
|
|
which in turn starts a new master process and the new worker processes::
|
|
|
|
|
|
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
|
|
20844 benoitc 20 0 54808 11m 3352 S 0.0 0.1 0:00.36 gunicorn: master [test:app]
|
|
20849 benoitc 20 0 54808 9.9m 1500 S 0.0 0.1 0:00.02 gunicorn: worker [test:app]
|
|
20850 benoitc 20 0 54808 9.9m 1500 S 0.0 0.1 0:00.01 gunicorn: worker [test:app]
|
|
20851 benoitc 20 0 54808 9.9m 1500 S 0.0 0.1 0:00.01 gunicorn: worker [test:app]
|
|
20854 benoitc 20 0 55748 12m 3348 S 0.0 0.2 0:00.35 gunicorn: master [test:app]
|
|
20859 benoitc 20 0 55748 11m 1500 S 0.0 0.1 0:00.01 gunicorn: worker [test:app]
|
|
20860 benoitc 20 0 55748 11m 1500 S 0.0 0.1 0:00.00 gunicorn: worker [test:app]
|
|
20861 benoitc 20 0 55748 11m 1500 S 0.0 0.1 0:00.01 gunicorn: worker [test:app]
|
|
|
|
At this point, two instances of gunicorn are running, handling the
|
|
incoming requests together. To phase the old instance out, you have to
|
|
send **WINCH** signal to the old master process, and its worker
|
|
processes will start to gracefully shut down.
|
|
|
|
t this point you can still revert to the old server because it hasn't closed its listen sockets yet, by following these steps:
|
|
|
|
- Send HUP signal to the old master process - it will start the worker processes without reloading a configuration file
|
|
- Send TERM signal to the new master process to gracefully shut down its worker processes
|
|
- Send QUIT signal to the new master process to force it quit
|
|
|
|
If for some reason new worker processes do not quit, send KILL signal to
|
|
them after the new master process quits, the old master process removes
|
|
.oldbin suffix from its .pid file, and everything is exactly as before
|
|
the upgrade attempt.
|
|
|
|
If an update is successful and you want to keep the new server, send
|
|
the TERM signal to the old master process to leave only new server
|
|
running::
|
|
|
|
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
|
|
20854 benoitc 20 0 55748 12m 3348 S 0.0 0.2 0:00.45 gunicorn: master [test:app]
|
|
20859 benoitc 20 0 55748 11m 1500 S 0.0 0.1 0:00.02 gunicorn: worker [test:app]
|
|
20860 benoitc 20 0 55748 11m 1500 S 0.0 0.1 0:00.02 gunicorn: worker [test:app]
|
|
20861 benoitc 20 0 55748 11m 1500 S 0.0 0.1 0:00.01 gunicorn: worker [test:app]
|