mirror of https://github.com/ouqiang/gocron
67 lines
1.4 KiB
Go
67 lines
1.4 KiB
Go
|
package cmd
|
||
|
|
||
|
import (
|
||
|
"github.com/urfave/cli"
|
||
|
"fmt"
|
||
|
"github.com/ouqiang/gocron/modules/utils"
|
||
|
"github.com/ouqiang/gocron/modules/app"
|
||
|
"os"
|
||
|
"syscall"
|
||
|
)
|
||
|
|
||
|
var CmdServ = cli.Command{
|
||
|
Name: "serv",
|
||
|
Usage: "manage gocron, ./gocron serv -s stop|status",
|
||
|
Action: runServ,
|
||
|
Flags: []cli.Flag{
|
||
|
cli.StringFlag{
|
||
|
Name: "s",
|
||
|
Value:"",
|
||
|
Usage: "stop|status",
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
|
||
|
func runServ(ctx *cli.Context) {
|
||
|
if utils.IsWindows() {
|
||
|
fmt.Println("not support on windows")
|
||
|
return
|
||
|
}
|
||
|
option := ctx.String("s")
|
||
|
if !utils.InStringSlice([]string{"stop", "status"}, option) {
|
||
|
fmt.Println("invalid option")
|
||
|
return
|
||
|
}
|
||
|
app.InitEnv()
|
||
|
pid := app.GetPid()
|
||
|
if pid <= 0 {
|
||
|
fmt.Println("not running")
|
||
|
return
|
||
|
}
|
||
|
process ,err := os.FindProcess(pid)
|
||
|
if err != nil {
|
||
|
fmt.Println("not running", err)
|
||
|
return
|
||
|
}
|
||
|
switch option {
|
||
|
case "stop":
|
||
|
stop(process)
|
||
|
case "status":
|
||
|
status(process)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func stop(process *os.Process) {
|
||
|
fmt.Println("stopping gocron......")
|
||
|
err := process.Signal(syscall.SIGTERM)
|
||
|
if err != nil {
|
||
|
fmt.Println("failed to kill process", err)
|
||
|
} else {
|
||
|
fmt.Println("stopped")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
func status(process *os.Process) {
|
||
|
fmt.Printf("running, pid-[%d]\n", process.Pid)
|
||
|
}
|