github.com/polarismesh/polaris@v1.17.8/bootstrap/run_linux.go (about) 1 /** 2 * Tencent is pleased to support the open source community by making Polaris available. 3 * 4 * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. 5 * 6 * Licensed under the BSD 3-Clause License (the "License"); 7 * you may not use this file except in compliance with the License. 8 * You may obtain a copy of the License at 9 * 10 * https://opensource.org/licenses/BSD-3-Clause 11 * 12 * Unless required by applicable law or agreed to in writing, software distributed 13 * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 14 * CONDITIONS OF ANY KIND, either express or implied. See the License for the 15 * specific language governing permissions and limitations under the License. 16 */ 17 18 package bootstrap 19 20 import ( 21 "os" 22 "os/signal" 23 "syscall" 24 25 "github.com/polarismesh/polaris/apiserver" 26 "github.com/polarismesh/polaris/common/log" 27 ) 28 29 var ( 30 linuxSignals = []os.Signal{ 31 syscall.SIGINT, syscall.SIGTERM, 32 syscall.SIGSEGV, syscall.SIGUSR1, syscall.SIGUSR2, 33 } 34 ch = make(chan os.Signal, 1) 35 ) 36 37 // WaitSignal 等待信号量或err chan 从而执行restart或平滑退出 38 func WaitSignal(servers []apiserver.Apiserver, errCh chan error) { 39 defer StopServers(servers) 40 41 // 监听信号量 42 signal.Notify(ch, linuxSignals...) 43 44 for { 45 select { 46 case s := <-ch: 47 switch s { 48 case syscall.SIGUSR1, syscall.SIGUSR2: 49 // 重启服务 50 if err := RestartServers(errCh); err != nil { // 如果重启失败,直接退出 51 log.Errorf("restart servers err: %s", err.Error()) 52 return 53 } 54 55 // todo 重启后需要重新监听信号量,等待重启或平滑退出 56 log.Infof("restart servers success: %s", s.String()) 57 default: 58 log.Infof("catch signal(%s), stop servers", s.String()) 59 return 60 } 61 case err := <-errCh: 62 log.Errorf("catch api server err: %s", err.Error()) 63 return 64 } 65 } 66 }