Go to file
kingecg 06f75dbe60 fix: 修复多个严重问题并改进代码质量
1. 修复空指针 panic 风险 - serveSignal() 添加 g.Running nil 检查
2. 修复错误未检查 - startDaemon/startTask 添加 cmd.Start() 错误处理
3. 修复 Task PID 未写入 - startTask() 现在正确写入 taskPidFile
4. 添加 PID 文件清理 - 进程退出时自动删除 PID 文件
5. 修复 goroutine 泄漏 - task 分支添加 signal.Stop()
6. 解耦日志依赖 - 移除 gologger,改为 Logger 接口
7. 添加单元测试 - godaemon_test.go 覆盖核心功能

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-07-11 09:31:25 +08:00
.vscode add code 2023-12-10 18:01:54 +08:00
test chore: update module path to git.kingecg.top 2025-06-26 00:52:50 +08:00
vendor update deps 2025-06-29 17:33:45 +08:00
.gitignore update 2024-10-02 18:38:36 +08:00
LICENSE Initial commit 2023-12-10 17:55:49 +08:00
README.md chore: update module path to git.kingecg.top 2025-06-26 00:52:50 +08:00
go.mod update deps 2025-06-29 17:33:45 +08:00
go.sum update deps 2025-06-29 17:33:45 +08:00
godaemon.go fix: 修复多个严重问题并改进代码质量 2026-07-11 09:31:25 +08:00
godaemon_test.go fix: 修复多个严重问题并改进代码质量 2026-07-11 09:31:25 +08:00

README.md

godaemon

A simple daemon library for Go.

Features:

  • provide a daemon process
  • can use command to start/stop/restart the daemon

Usage:

import (
	"time"

	"git.kingecg.top/kingecg/godaemon"
	"git.kingecg.top/kingecg/gologger"
)

var daemon *godaemon.GoDaemon

func main() {
	gologger.Configure(gologger.LoggersConfig{
		Appenders: map[string]gologger.LogAppenderConfig{
			"flog": {
				Type: "console",
			},
		},
		Categories: map[string]gologger.LogConfig{
			"default": {
				Appenders: []string{"flog"},
				Level:     "debug",
			},
		},
	})
	daemon := godaemon.NewGoDaemon(start, stop)
	daemon.Start()
}

func start(g *godaemon.GoDaemon) {
	l := gologger.GetLogger("task")
	for {
		time.Sleep(time.Second * 1)
		l.Debug("task running:", g.GetPid())
	}
}

func stop(g *godaemon.GoDaemon) {
	l := gologger.GetLogger("task")
	l.Debug("called stop")
	if g == nil {
		l.Debug("Daemon is nil")
		return
	}
	if g.Running == nil {
		l.Debug("task is nil")
		return
	}

}

命令:

  • without arguments: start the daemon
  • -s quit: stop the daemon
  • -s restart: restart the daemon