mirror of
https://gitee.com/gokins/gokins.git
synced 2024-11-29 17:57:50 +08:00
83 lines
1.9 KiB
Go
83 lines
1.9 KiB
Go
package cmd
|
|
|
|
import (
|
|
"github.com/gokins/core"
|
|
"github.com/gokins/gokins/comm"
|
|
"github.com/gokins/gokins/server"
|
|
hbtp "github.com/mgr9525/HyperByte-Transfer-Protocol"
|
|
"gopkg.in/alecthomas/kingpin.v2"
|
|
"os"
|
|
"os/exec"
|
|
"os/signal"
|
|
"syscall"
|
|
)
|
|
|
|
const Version = "0.1.1"
|
|
|
|
var app = kingpin.New("gokins", "A golang workflow application.")
|
|
|
|
func Run() {
|
|
regs()
|
|
kingpin.Version(Version)
|
|
kingpin.MustParse(app.Parse(os.Args[1:]))
|
|
}
|
|
func regs() {
|
|
app.Flag("web", "gokins web host").Default(":8030").StringVar(&comm.WebHost)
|
|
//app.Flag("hbtp", "gokins hbtp host").Default(":8031").StringVar(&comm.HbtpHost)
|
|
app.Flag("workdir", "gokins work path").Short('w').StringVar(&comm.WorkPath)
|
|
app.Flag("nupass", "can't update password").Hidden().BoolVar(&comm.NotUpPass)
|
|
cmd := app.Command("run", "run process").Default().
|
|
Action(run)
|
|
cmd.Flag("debug", "debug log show").BoolVar(&core.Debug)
|
|
|
|
cmd = app.Command("daemon", "run process background").
|
|
Action(start)
|
|
}
|
|
func getArgs() []string {
|
|
args := make([]string, 0)
|
|
args = append(args, "run")
|
|
if comm.WebHost != "" {
|
|
args = append(args, "--web")
|
|
args = append(args, comm.WebHost)
|
|
}
|
|
/*if comm.HbtpHost != "" {
|
|
args = append(args, "--hbtp")
|
|
args = append(args, comm.HbtpHost)
|
|
}*/
|
|
if comm.WorkPath != "" {
|
|
args = append(args, "--workdir")
|
|
args = append(args, comm.WorkPath)
|
|
}
|
|
if comm.NotUpPass {
|
|
args = append(args, "--nupass")
|
|
}
|
|
return args
|
|
}
|
|
func start(pc *kingpin.ParseContext) error {
|
|
args := getArgs()
|
|
fullpth, err := os.Executable()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
println("start process")
|
|
cmd := exec.Command(fullpth, args...)
|
|
err = cmd.Start()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
func run(pc *kingpin.ParseContext) error {
|
|
csig := make(chan os.Signal, 1)
|
|
signal.Notify(csig, os.Interrupt, syscall.SIGALRM)
|
|
go func() {
|
|
s := <-csig
|
|
hbtp.Debugf("get signal(%d):%s", s, s.String())
|
|
comm.Cancel()
|
|
}()
|
|
if core.Debug {
|
|
hbtp.Debug = true
|
|
}
|
|
return server.Run()
|
|
}
|