From b780f0f49b191a6724b7ec54aa62a97d23977231 Mon Sep 17 00:00:00 2001 From: Matthew Holt Date: Fri, 12 Jul 2019 10:07:11 -0600 Subject: Standardize exit codes and improve shutdown handling; update gitignore --- sigtrap_posix.go | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 sigtrap_posix.go (limited to 'sigtrap_posix.go') diff --git a/sigtrap_posix.go b/sigtrap_posix.go new file mode 100644 index 0000000..63e6a31 --- /dev/null +++ b/sigtrap_posix.go @@ -0,0 +1,57 @@ +// Copyright 2015 Matthew Holt and The Caddy Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// +build !windows,!plan9,!nacl,!js + +package caddy + +import ( + "log" + "os" + "os/signal" + "syscall" + + "github.com/mholt/certmagic" +) + +// trapSignalsPosix captures POSIX-only signals. +func trapSignalsPosix() { + go func() { + sigchan := make(chan os.Signal, 1) + signal.Notify(sigchan, syscall.SIGTERM, syscall.SIGHUP, syscall.SIGQUIT, syscall.SIGUSR1, syscall.SIGUSR2) + + for sig := range sigchan { + switch sig { + case syscall.SIGQUIT: + log.Println("[INFO] SIGQUIT: Quitting process immediately") + certmagic.CleanUpOwnLocks() // try to clean up locks anyway, it's important + os.Exit(ExitCodeForceQuit) + + case syscall.SIGTERM: + log.Println("[INFO] SIGTERM: Shutting down apps then terminating") + gracefulStop("SIGTERM") + + case syscall.SIGUSR1: + log.Println("[INFO] SIGUSR1: Not implemented") + + case syscall.SIGUSR2: + log.Println("[INFO] SIGUSR2: Not implemented") + + case syscall.SIGHUP: + // ignore; this signal is sometimes sent outside of the user's control + log.Println("[INFO] SIGHUP: Not implemented") + } + } + }() +} -- cgit v1.2.3