import (
"flag"
"fmt"
"github.com/Sirupsen/logrus"
"log"
"os"
"os/signal"
"syscall"
)
var (
pConfig ProxyConfig
pLog *logrus.Logger
configFile = flag.String("c", "etc/conf.yaml", "配置文件,默认etc/conf.yaml") //默认配置问价地址,如果不配置的话
)
func onExitSignal() {
sigChan := make(chan os.Signal) //信号量通道
signal.Notify(sigChan, syscall.SIGUSR1, syscall.SIGTERM, syscall.SIGINT) //信号量捕获事件
L: //标签
for {
sig := <-sigChan
switch sig {
case syscall.SIGUSR1:
log.Fatal("Reopen log file")
case syscall.SIGTERM, syscall.SIGINT:
log.Fatal("Catch SIGTERM singal, exit.")
break L
}
}
}
func main() {
flag.Parse() //参数解析
fmt.Println("Start Proxy...")
if parseConfigFile(*configFile) != nil { //yaml文件解析
return
}
// init logger server
initLogger() //日志初始化
// init Backend server
initBackendSvrs(pConfig.Backend) //初始化后端服务
go onExitSignal() // 开启协成 中断信号捕获
// init status service
initStats() //初始化 系统状态监控
// init proxy service
initProxy() //初始化代理服务
}