123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- package main
-
- import (
- "context"
- "flag"
- "fmt"
- "log"
- "os"
- "path/filepath"
-
- cfg "3g3e.com/ymdx/config"
- "3g3e.com/ymdx/glog"
- "3g3e.com/ymdx/lib"
- "github.com/takama/daemon"
- )
-
- type exitApp struct {
- ctx context.Context
- exit context.CancelFunc
- baseDir string
- }
-
- func imain(ctx context.Context, baseDir string) *exitApp {
- app := &exitApp{
- ctx: ctx,
- baseDir: baseDir,
- }
-
- go app.main()
-
- return app
- }
-
- func (app *exitApp) WillExit() error {
- return nil
- }
-
- func (app *exitApp) SetExitCtrl(exit context.CancelFunc) {
- app.exit = exit
- }
-
- // Service is
- type Service struct {
- daemon.Daemon
- baseDir string
- }
-
- // Manage is
- func (s *Service) Manage() (string, error) {
-
- usage := "Usage: " + srvName + " install | remove | start | stop | status"
-
- if len(os.Args) > 1 {
- command := os.Args[1]
- switch command {
- case "install":
- return s.Install()
- case "remove":
- return s.Remove()
- case "start":
- return s.Start()
- case "stop":
- return s.Stop()
- case "status":
- return s.Status()
- default:
- return usage, nil
- }
- }
- /*************** CLI ***************/
- cliLog := &log.Logger{}
- glog.LoggerOutput(cliLog, &glog.LogBridgeOptions{
- Prefix: "CLI",
- BaseDepth: 3,
- ReplaceMap: nil,
- ShowHeaderTrace: true,
- })
- cli, ctx := lib.NewCLI(s.baseDir, cliLog)
- defer cli.Shutdown()
-
- /*************** 性能分析 ***************/
- //go http.ListenAndServe(":6060", nil)
-
- /*************** 核心 ***************/
- // defer cfg.SaveConfig()
- defer glog.Flush()
-
- sp := imain(ctx, s.baseDir)
- cli.Add(sp)
-
- /************** CLI LOOP **************/
- cli.Loop()
- return "Daemon was killed", nil
- }
-
- func main() {
- baseDir := ""
- flag.StringVar(&baseDir, "dir", "./_data", "running in a directory")
- flag.Parse()
-
- baseDir = lib.EnsureDir(baseDir)
- pathGLogDir := filepath.Join(baseDir, "glog")
- pathLogDir := filepath.Join(baseDir, "log")
-
- // 独立于baseDir
- confDir := lib.EnsureDir("./conf")
- pathConfig := filepath.Join(confDir, "default.conf")
-
- // os.RemoveAll(pathPageDir)
- // os.RemoveAll(pathCaptureDir)
- // os.RemoveAll(pathGLogDir)
-
- cfg.InitWithFile("json", pathConfig)
- glog.DefaultInit(glog.OtherLog, true, pathGLogDir, pathLogDir)
-
- /*************** Service ***************/
- srv, err := daemon.New(srvName, srvDescription, daemon.SystemDaemon)
- if err != nil {
- glog.Errorln("Error: ", err)
- os.Exit(1)
- }
- s := &Service{srv, baseDir}
- status, err := s.Manage()
- if err != nil {
- glog.Errorln(status, "\nError: ", err)
- os.Exit(1)
- }
- fmt.Println(status)
- }
|