server: explicit signal handler for SIGINT and SIGTERM (#3595)
When running alone as pid 1 in a container, most signals that would cause the process to exit by default, are instead ignored by default. The container runtime will send SIGTERM, wait 10 seconds, then send SIGKILL, which will work, but moto.server can exit much faster if it has an explicit SIGTERM handler.
This commit is contained in:
parent
f11e3183bb
commit
2bdba88389
@ -4,6 +4,7 @@ import argparse
|
||||
import io
|
||||
import json
|
||||
import re
|
||||
import signal
|
||||
import sys
|
||||
from threading import Lock
|
||||
|
||||
@ -245,6 +246,11 @@ def create_backend_app(service):
|
||||
return backend_app
|
||||
|
||||
|
||||
def signal_handler(signum, frame):
|
||||
print("Received signal %d" % signum)
|
||||
sys.exit(0)
|
||||
|
||||
|
||||
def main(argv=sys.argv[1:]):
|
||||
parser = argparse.ArgumentParser()
|
||||
|
||||
@ -284,6 +290,9 @@ def main(argv=sys.argv[1:]):
|
||||
|
||||
args = parser.parse_args(argv)
|
||||
|
||||
signal.signal(signal.SIGINT, signal_handler)
|
||||
signal.signal(signal.SIGTERM, signal_handler)
|
||||
|
||||
# Wrap the main application
|
||||
main_app = DomainDispatcherApplication(create_backend_app, service=args.service)
|
||||
main_app.debug = True
|
||||
|
Loading…
Reference in New Issue
Block a user