Gracefully clean up on SIGTERM

This commit is contained in:
Matthew Hooker 2017-09-08 11:31:19 -07:00
parent 6f3def853f
commit fdaf4ed8d3
No known key found for this signature in database
GPG Key ID: 7B5F933D9CE8C6A1
6 changed files with 13 additions and 6 deletions

View File

@ -9,6 +9,7 @@ import (
"strconv"
"strings"
"sync"
"syscall"
"github.com/hashicorp/packer/helper/enumflag"
"github.com/hashicorp/packer/packer"
@ -144,7 +145,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"
@ -86,6 +87,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

@ -10,7 +10,6 @@ package plugin
import (
"errors"
"fmt"
packrpc "github.com/hashicorp/packer/packer/rpc"
"io/ioutil"
"log"
"math/rand"
@ -20,7 +19,10 @@ import (
"runtime"
"strconv"
"sync/atomic"
"syscall"
"time"
packrpc "github.com/hashicorp/packer/packer/rpc"
)
// This is a count of the number of interrupts the process has received.
@ -87,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)