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> |
||
|---|---|---|
| .vscode | ||
| test | ||
| vendor | ||
| .gitignore | ||
| LICENSE | ||
| README.md | ||
| go.mod | ||
| go.sum | ||
| godaemon.go | ||
| godaemon_test.go | ||
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