mirror of
https://github.com/wavetermdev/backup.git
synced 2026-08-05 13:57:07 -07:00
let SIGHUP or stdin close trigger a shutdown
This commit is contained in:
+18
-10
@@ -52,6 +52,7 @@ var GlobalLock = &sync.Mutex{}
|
|||||||
var WSStateMap = make(map[string]*scws.WSState) // clientid -> WsState
|
var WSStateMap = make(map[string]*scws.WSState) // clientid -> WsState
|
||||||
var GlobalAuthKey string
|
var GlobalAuthKey string
|
||||||
var BuildTime = "0"
|
var BuildTime = "0"
|
||||||
|
var shutdownOnce sync.Once
|
||||||
|
|
||||||
type ClientActiveState struct {
|
type ClientActiveState struct {
|
||||||
Fg bool `json:"fg"`
|
Fg bool `json:"fg"`
|
||||||
@@ -450,18 +451,10 @@ func stdinReadWatch() {
|
|||||||
for {
|
for {
|
||||||
_, err := os.Stdin.Read(buf)
|
_, err := os.Stdin.Read(buf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("[prompt] stdin closed/error, shutting down: %v\n", err)
|
doShutdown(fmt.Sprintf("stdin closed/error (%v)", err))
|
||||||
sendTelemetryWrapper()
|
|
||||||
log.Printf("[prompt] closing db connection\n")
|
|
||||||
sstore.CloseDB()
|
|
||||||
log.Printf("[prompt] *** shutting down local server\n")
|
|
||||||
time.Sleep(1 * time.Second)
|
|
||||||
syscall.Kill(syscall.Getpid(), syscall.SIGINT)
|
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
time.Sleep(10 * time.Second)
|
|
||||||
syscall.Kill(syscall.Getpid(), syscall.SIGKILL)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ignore SIGHUP
|
// ignore SIGHUP
|
||||||
@@ -470,11 +463,26 @@ func installSignalHandlers() {
|
|||||||
signal.Notify(sigCh, syscall.SIGHUP)
|
signal.Notify(sigCh, syscall.SIGHUP)
|
||||||
go func() {
|
go func() {
|
||||||
for sig := range sigCh {
|
for sig := range sigCh {
|
||||||
fmt.Printf("[prompt] got signal %v (ignoring)\n", sig)
|
doShutdown(fmt.Sprintf("got signal %v", sig))
|
||||||
|
break
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func doShutdown(reason string) {
|
||||||
|
shutdownOnce.Do(func() {
|
||||||
|
log.Printf("[prompt] local server %v, start shutdown\n", reason)
|
||||||
|
sendTelemetryWrapper()
|
||||||
|
log.Printf("[prompt] closing db connection\n")
|
||||||
|
sstore.CloseDB()
|
||||||
|
log.Printf("[prompt] *** shutting down local server\n")
|
||||||
|
time.Sleep(1 * time.Second)
|
||||||
|
syscall.Kill(syscall.Getpid(), syscall.SIGINT)
|
||||||
|
time.Sleep(5 * time.Second)
|
||||||
|
syscall.Kill(syscall.Getpid(), syscall.SIGKILL)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
scbase.BuildTime = BuildTime
|
scbase.BuildTime = BuildTime
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user