Gracefully clean up on SIGTERM
This commit is contained in:
parent
6f3def853f
commit
fdaf4ed8d3
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
2
main.go
2
main.go
|
@ -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)
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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)
|
||||
|
|
3
stdin.go
3
stdin.go
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue