revert
This commit is contained in:
58
main.go
58
main.go
@@ -42,9 +42,11 @@ func createDefaultConfig(configFile string) error {
|
||||
"saveInterval": 300
|
||||
},
|
||||
"http": {
|
||||
"port": 8081,
|
||||
"port": 8080,
|
||||
"host": "0.0.0.0",
|
||||
"enableAPI": true
|
||||
"enableAPI": true,
|
||||
"username": "admin",
|
||||
"password": "admin"
|
||||
},
|
||||
"shield": {
|
||||
"localRulesFile": "data/rules.txt",
|
||||
@@ -146,20 +148,9 @@ func createRequiredFiles(cfg *config.Config) error {
|
||||
func main() {
|
||||
// 命令行参数解析
|
||||
var configFile string
|
||||
var daemonMode bool
|
||||
flag.StringVar(&configFile, "config", "config.json", "配置文件路径")
|
||||
flag.BoolVar(&daemonMode, "daemon", false, "以守护进程模式运行")
|
||||
flag.Parse()
|
||||
|
||||
// 如果是守护进程模式,创建守护进程
|
||||
if daemonMode {
|
||||
if err := daemonize(); err != nil {
|
||||
log.Fatalf("创建守护进程失败: %v", err)
|
||||
}
|
||||
// 父进程退出
|
||||
os.Exit(0)
|
||||
}
|
||||
|
||||
// 检查配置文件是否存在,如果不存在则创建默认配置文件
|
||||
if _, err := os.Stat(configFile); os.IsNotExist(err) {
|
||||
log.Printf("配置文件 %s 不存在,正在创建默认配置文件...", configFile)
|
||||
@@ -185,7 +176,7 @@ func main() {
|
||||
log.Println("所需文件和文件夹创建成功")
|
||||
|
||||
// 初始化日志系统
|
||||
if err := logger.InitLogger(cfg.Log.File, cfg.Log.Level, 0, 0, 0); err != nil {
|
||||
if err := logger.InitLogger(cfg.Log.File, cfg.Log.Level, 0, 0, 0, false); err != nil {
|
||||
log.Fatalf("初始化日志系统失败: %v", err)
|
||||
}
|
||||
defer logger.Close()
|
||||
@@ -225,45 +216,10 @@ func main() {
|
||||
<-sigCh
|
||||
|
||||
// 清理资源
|
||||
log.Println("正在关闭服务...")
|
||||
logger.Info("正在关闭服务...")
|
||||
dnsServer.Stop()
|
||||
httpServer.Stop()
|
||||
shieldManager.StopAutoUpdate()
|
||||
// 守护进程模式下不需要删除PID文件
|
||||
|
||||
log.Println("服务已关闭")
|
||||
}
|
||||
|
||||
// daemonize 创建守护进程
|
||||
func daemonize() error {
|
||||
// 使用更简单的方式创建守护进程:直接在当前进程中进行守护化处理
|
||||
// 1. 重定向标准输入、输出、错误
|
||||
nullFile, err := os.OpenFile("/dev/null", os.O_RDWR, 0)
|
||||
if err != nil {
|
||||
return fmt.Errorf("打开/dev/null失败: %w", err)
|
||||
}
|
||||
defer nullFile.Close()
|
||||
|
||||
// 重定向文件描述符
|
||||
err = syscall.Dup2(int(nullFile.Fd()), int(os.Stdin.Fd()))
|
||||
if err != nil {
|
||||
return fmt.Errorf("重定向stdin失败: %w", err)
|
||||
}
|
||||
err = syscall.Dup2(int(nullFile.Fd()), int(os.Stdout.Fd()))
|
||||
if err != nil {
|
||||
return fmt.Errorf("重定向stdout失败: %w", err)
|
||||
}
|
||||
err = syscall.Dup2(int(nullFile.Fd()), int(os.Stderr.Fd()))
|
||||
if err != nil {
|
||||
return fmt.Errorf("重定向stderr失败: %w", err)
|
||||
}
|
||||
|
||||
// 2. 创建新的会话和进程组
|
||||
_, err = syscall.Setsid()
|
||||
if err != nil {
|
||||
return fmt.Errorf("创建新会话失败: %w", err)
|
||||
}
|
||||
|
||||
fmt.Println("守护进程已启动")
|
||||
return nil
|
||||
logger.Info("服务已关闭")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user