feat: 添加退出信号监听功能,优雅关闭服务并输出相关信息
This commit is contained in:
26
main.go
26
main.go
@@ -3,7 +3,10 @@ package main
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"os"
|
||||||
|
"os/signal"
|
||||||
"sync"
|
"sync"
|
||||||
|
"syscall"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
_ "net/http/pprof"
|
_ "net/http/pprof"
|
||||||
@@ -146,6 +149,8 @@ func main() {
|
|||||||
src.ConfigurationInit()
|
src.ConfigurationInit()
|
||||||
|
|
||||||
app := src.AppEngine()
|
app := src.AppEngine()
|
||||||
|
fmt.Printf("OMC Service %s\n\n", config.Version)
|
||||||
|
|
||||||
src.DefeatConfig(app)
|
src.DefeatConfig(app)
|
||||||
|
|
||||||
loadGlobalPre(app)
|
loadGlobalPre(app)
|
||||||
@@ -156,11 +161,27 @@ func main() {
|
|||||||
|
|
||||||
loadServerWeb()
|
loadServerWeb()
|
||||||
|
|
||||||
|
stopSignal()
|
||||||
|
|
||||||
// 首次安装启动记录
|
// 首次安装启动记录
|
||||||
machine.Launch()
|
machine.Launch()
|
||||||
wg.Wait()
|
wg.Wait()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// stopSignal 监听退出信号
|
||||||
|
func stopSignal() {
|
||||||
|
sigCh := make(chan os.Signal, 1)
|
||||||
|
signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM)
|
||||||
|
wg.Add(1)
|
||||||
|
go func() {
|
||||||
|
defer wg.Done()
|
||||||
|
<-sigCh // 等待退出信号
|
||||||
|
src.ConfigurationClose()
|
||||||
|
fmt.Println("\nStop Service... OK")
|
||||||
|
os.Exit(0)
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
|
||||||
// loadGlobalPre 全局预加载
|
// loadGlobalPre 全局预加载
|
||||||
func loadGlobalPre(app *gin.Engine) {
|
func loadGlobalPre(app *gin.Engine) {
|
||||||
// Swagger 接口文档
|
// Swagger 接口文档
|
||||||
@@ -185,6 +206,7 @@ func loadGlobalPre(app *gin.Engine) {
|
|||||||
go func(addr string) {
|
go func(addr string) {
|
||||||
defer wg.Done()
|
defer wg.Done()
|
||||||
for i := range maxRetries {
|
for i := range maxRetries {
|
||||||
|
fmt.Printf("pprof HTTP on %s\n", addr)
|
||||||
if err := http.ListenAndServe(addr, nil); err != nil {
|
if err := http.ListenAndServe(addr, nil); err != nil {
|
||||||
logger.Errorf("pprof run err:%v", err)
|
logger.Errorf("pprof run err:%v", err)
|
||||||
time.Sleep(retryInterval) // 重试间隔时间
|
time.Sleep(retryInterval) // 重试间隔时间
|
||||||
@@ -220,6 +242,7 @@ func loadServerRoute(app *gin.Engine) {
|
|||||||
go func(addr string, certFile string, keyFile string) {
|
go func(addr string, certFile string, keyFile string) {
|
||||||
defer wg.Done()
|
defer wg.Done()
|
||||||
for i := range maxRetries {
|
for i := range maxRetries {
|
||||||
|
fmt.Printf("API HTTPS on %s\n", addr)
|
||||||
if err := app.RunTLS(addr, certFile, keyFile); err != nil {
|
if err := app.RunTLS(addr, certFile, keyFile); err != nil {
|
||||||
logger.Errorf("routeServer run tls err:%v", err)
|
logger.Errorf("routeServer run tls err:%v", err)
|
||||||
time.Sleep(retryInterval) // 重试间隔时间
|
time.Sleep(retryInterval) // 重试间隔时间
|
||||||
@@ -233,6 +256,7 @@ func loadServerRoute(app *gin.Engine) {
|
|||||||
go func(addr string) {
|
go func(addr string) {
|
||||||
defer wg.Done()
|
defer wg.Done()
|
||||||
for i := range maxRetries {
|
for i := range maxRetries {
|
||||||
|
fmt.Printf("API HTTP on %s\n", addr)
|
||||||
if err := app.Run(addr); err != nil {
|
if err := app.Run(addr); err != nil {
|
||||||
logger.Errorf("routeServer run err:%v", err)
|
logger.Errorf("routeServer run err:%v", err)
|
||||||
time.Sleep(retryInterval) // 重试间隔时间
|
time.Sleep(retryInterval) // 重试间隔时间
|
||||||
@@ -286,6 +310,7 @@ func loadServerWeb() {
|
|||||||
go func(addr string, certFile string, keyFile string) {
|
go func(addr string, certFile string, keyFile string) {
|
||||||
defer wg.Done()
|
defer wg.Done()
|
||||||
for i := range maxRetries {
|
for i := range maxRetries {
|
||||||
|
fmt.Printf("WEB HTTPS on %s\n", addr)
|
||||||
if err := web.RunTLS(addr, certFile, keyFile); err != nil {
|
if err := web.RunTLS(addr, certFile, keyFile); err != nil {
|
||||||
logger.Errorf("webServer run tls err:%v", err)
|
logger.Errorf("webServer run tls err:%v", err)
|
||||||
time.Sleep(retryInterval) // 重试间隔时间
|
time.Sleep(retryInterval) // 重试间隔时间
|
||||||
@@ -302,6 +327,7 @@ func loadServerWeb() {
|
|||||||
go func(addr string) {
|
go func(addr string) {
|
||||||
defer wg.Done()
|
defer wg.Done()
|
||||||
for i := range maxRetries {
|
for i := range maxRetries {
|
||||||
|
fmt.Printf("WEB HTTP on %s\n", addr)
|
||||||
if err := web.Run(addr); err != nil {
|
if err := web.Run(addr); err != nil {
|
||||||
logger.Errorf("webServer run err:%v", err)
|
logger.Errorf("webServer run err:%v", err)
|
||||||
time.Sleep(retryInterval) // 重试间隔时间
|
time.Sleep(retryInterval) // 重试间隔时间
|
||||||
|
|||||||
Reference in New Issue
Block a user