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:
Pierce Lopez 2021-01-19 12:46:00 -05:00 committed by GitHub
parent f11e3183bb
commit 2bdba88389
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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