57 lines
1.2 KiB
Go
57 lines
1.2 KiB
Go
package signalMgr
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"os/signal"
|
|
"syscall"
|
|
|
|
"Framework/exitMgr"
|
|
"Framework/goroutineMgr"
|
|
"Framework/reloadMgr"
|
|
"goutil/debugUtil"
|
|
"goutil/logUtil"
|
|
)
|
|
|
|
// Start ...启动信号管理器
|
|
func Start() {
|
|
go func() {
|
|
goroutineName := "signalMgr.Start"
|
|
goroutineMgr.Monitor(goroutineName)
|
|
defer goroutineMgr.ReleaseMonitor(goroutineName)
|
|
|
|
sigs := make(chan os.Signal)
|
|
signal.Notify(sigs, syscall.SIGTERM, syscall.SIGINT, syscall.SIGHUP)
|
|
|
|
for {
|
|
// 准备接收信息
|
|
sig := <-sigs
|
|
|
|
// 输出信号
|
|
debugUtil.Println("sig:", sig)
|
|
|
|
if sig == syscall.SIGHUP {
|
|
logUtil.InfoLog("收到重启的信号,准备重新加载配置")
|
|
|
|
// 重新加载
|
|
errList := reloadMgr.Reload()
|
|
for _, err := range errList {
|
|
logUtil.ErrorLog(fmt.Sprintf("重启失败,错误信息为:%s", err))
|
|
}
|
|
|
|
logUtil.InfoLog("收到重启的信号,重新加载配置完成")
|
|
} else {
|
|
logUtil.InfoLog("收到退出程序的信号,开始退出……")
|
|
|
|
// 调用退出的方法
|
|
exitMgr.Exit()
|
|
|
|
logUtil.InfoLog("收到退出程序的信号,退出完成……")
|
|
|
|
// 一旦收到信号,则表明管理员希望退出程序,则先保存信息,然后退出
|
|
os.Exit(0)
|
|
}
|
|
}
|
|
}()
|
|
}
|