Merge pull request #5318 from hashicorp/sigtermcleanup

Gracefully clean up on SIGTERM
This commit is contained in:
SwampDragons 2018-02-02 11:56:56 -08:00 committed by GitHub
commit 997f8e4a2a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 11 additions and 5 deletions

View File

@ -9,6 +9,7 @@ import (
"strconv"
"strings"
"sync"
"syscall"
"github.com/hashicorp/packer/helper/enumflag"
"github.com/hashicorp/packer/packer"
@ -146,7 +147,7 @@ func (c BuildCommand) Run(args []string) int {
// Handle interrupts for this build
sigCh := make(chan os.Signal, 1)
signal.Notify(sigCh, os.Interrupt)
signal.Notify(sigCh, os.Interrupt, syscall.SIGTERM)
defer signal.Stop(sigCh)
go func(b packer.Build) {
<-sigCh

View File

@ -8,6 +8,7 @@ import (
"path/filepath"
"regexp"
"strings"
"syscall"
"github.com/hashicorp/atlas-go/archive"
"github.com/hashicorp/atlas-go/v1"
@ -267,7 +268,7 @@ func (c *PushCommand) Run(args []string) int {
// Make a ctrl-C channel
sigCh := make(chan os.Signal, 1)
signal.Notify(sigCh, os.Interrupt)
signal.Notify(sigCh, os.Interrupt, syscall.SIGTERM)
defer signal.Stop(sigCh)
err = nil

View File

@ -13,6 +13,7 @@ import (
"path/filepath"
"runtime"
"sync"
"syscall"
"time"
"github.com/hashicorp/go-uuid"
@ -88,6 +89,7 @@ func realMain() int {
wrapConfig.Writer = io.MultiWriter(logTempFile, logWriter)
wrapConfig.Stdout = outW
wrapConfig.DetectDuration = 500 * time.Millisecond
wrapConfig.ForwardSignals = []os.Signal{syscall.SIGTERM}
exitStatus, err := panicwrap.Wrap(&wrapConfig)
if err != nil {
fmt.Fprintf(os.Stderr, "Couldn't start Packer: %s", err)

View File

@ -19,6 +19,7 @@ import (
"runtime"
"strconv"
"sync/atomic"
"syscall"
"time"
packrpc "github.com/hashicorp/packer/packer/rpc"
@ -88,7 +89,7 @@ func Server() (*packrpc.Server, error) {
// Eat the interrupts
ch := make(chan os.Signal, 1)
signal.Notify(ch, os.Interrupt)
signal.Notify(ch, os.Interrupt, syscall.SIGTERM)
go func() {
var count int32 = 0
for {

View File

@ -180,7 +180,7 @@ func (rw *BasicUi) Ask(query string) (string, error) {
rw.scanner = bufio.NewScanner(rw.Reader)
}
sigCh := make(chan os.Signal, 1)
signal.Notify(sigCh, os.Interrupt)
signal.Notify(sigCh, os.Interrupt, syscall.SIGTERM)
defer signal.Stop(sigCh)
log.Printf("ui: ask: %s", query)

View File

@ -5,6 +5,7 @@ import (
"log"
"os"
"os/signal"
"syscall"
)
// setupStdin switches out stdin for a pipe. We do this so that we can
@ -26,7 +27,7 @@ func setupStdin() {
// Register a signal handler for interrupt in order to close the
// writer end of our pipe so that readers get EOF downstream.
ch := make(chan os.Signal, 1)
signal.Notify(ch, os.Interrupt)
signal.Notify(ch, os.Interrupt, syscall.SIGTERM)
go func() {
defer signal.Stop(ch)