feat: 添加退出信号监听功能,优雅关闭服务并输出相关信息

This commit is contained in:
TsMask
2025-10-18 18:02:32 +08:00
parent f4d4ca0b15
commit 5d9d54eadc

26
main.go
View File

@@ -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) // 重试间隔时间