Skip to content
This repository has been archived by the owner on Nov 9, 2018. It is now read-only.

Commit

Permalink
🔨 start stop status
Browse files Browse the repository at this point in the history
  • Loading branch information
hellokaton committed Jun 10, 2018
1 parent 4dd617c commit 254b074
Show file tree
Hide file tree
Showing 5 changed files with 127 additions and 6 deletions.
83 changes: 82 additions & 1 deletion cmds/cmd.go
Original file line number Diff line number Diff line change
@@ -1,22 +1,103 @@
package cmds

import (
"io"
"io/ioutil"
"log"
"os"
"strconv"
"strings"
"syscall"
)

const (
statusURL = "https://otale.github.io/status/version.json"
pidFile = "tale.pid"
)

// StartAction 启动 tale 博客
func StartAction() error {
return nil
os.Remove(pidFile)
shell := "nohup java -Xms256m -Xmx256m -Dfile.encoding=UTF-8 -jar tale-letast.jar > /dev/null 2>&1 & echo $! > " + pidFile
_, _, _, err := StartCmd(shell)
if err != nil {
return err
}
log.Println("博客程序已经启动成功,可使用 log 命令查看日志")
return err
}

// StopAction 停止 tale 博客
func StopAction() error {
dat, err := ioutil.ReadFile(pidFile)
if err != nil {
return err
}
log.Println("pid:", strings.TrimSpace(string(dat)))

pid, err := strconv.Atoi(strings.TrimSpace(string(dat)))
if err != nil {
return err
}
err = syscall.Kill(pid, syscall.Signal(2))
// _, err = KillPID(pid)
if err != nil {
log.Println("err", err)
return err
}
err = os.Remove(pidFile)
if err != nil {
return err
}
log.Println("博客程序已经停止")
return nil
}

// RestartAction 重启 tale 博客
func RestartAction() error {
err := StopAction()
if err == nil {
StartAction()
}
return err
}

// StatusAction 查看博客运行状态
func StatusAction() error {
// if _, err := os.Stat(pidFile); os.IsNotExist(err) {
// log.Panicln("博客已经停止运行")
// return nil
// }
dat, err := ioutil.ReadFile(pidFile)
if err != nil {
log.Println("博客已经停止运行")
return nil
}
pid := strings.TrimSpace(string(dat))
if pid == "" {
log.Println("博客已经停止运行")
return nil
}
pidInt, err := strconv.Atoi(strings.TrimSpace(string(dat)))
if err != nil {
return err
}
_, err = os.FindProcess(pidInt)
if err != nil {
return nil
}
log.Println("Tale 博客正在运行")
return nil
}

// LogAction 输出日志
func LogAction() error {
_, stdout, stderr, err := StartCmd("tail -f logs/tale.log")
if err != nil {
return err
}
io.Copy(os.Stderr, stderr)
io.Copy(os.Stdout, stdout)
return nil
}

Expand Down
32 changes: 32 additions & 0 deletions cmds/utils.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package cmds

import (
"io"
"os/exec"
"syscall"
)

func KillPID(pid int) (int, error) {
// https://stackoverflow.com/questions/22470193/why-wont-go-kill-a-child-process-correctly
err := syscall.Kill(pid, syscall.SIGKILL)
return pid, err
}

func StartCmd(cmd string) (*exec.Cmd, io.ReadCloser, io.ReadCloser, error) {
var err error
c := exec.Command("/bin/sh", "-c", cmd)
c.SysProcAttr = &syscall.SysProcAttr{Setsid: true}
stderr, err := c.StderrPipe()
if err != nil {
return nil, nil, nil, err
}
stdout, err := c.StdoutPipe()
if err != nil {
return nil, nil, nil, err
}
err = c.Start()
if err != nil {
return nil, nil, nil, err
}
return c, stdout, stderr, err
}
10 changes: 10 additions & 0 deletions cmds/version.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package cmds

// Version tale版本信息
type Version struct {
LatestVersion string `json:"latest_version"`
PublishTime int `json:"publish_time"`
Hash string `json:"hash"`
ChangeLogs []string `json:"change_logs"`
DownloadURL string `json:"download_url"`
}
6 changes: 3 additions & 3 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,18 +16,18 @@ Github: https://github.com/otale/tale`
func main() {
bin := comandante.New("tale-cli", banner)

// list command
startCmd := comandante.NewCommand("start", "启动 Tale 博客", cmds.StartAction)
bin.RegisterCommand(startCmd)

// list command
stopCmd := comandante.NewCommand("stop", "停止 Tale 博客", cmds.StopAction)
bin.RegisterCommand(stopCmd)

// list command
restartCmd := comandante.NewCommand("restart", "重启 Tale 博客", cmds.RestartAction)
bin.RegisterCommand(restartCmd)

statusCmd := comandante.NewCommand("status", "查看 Tale 博客运行状态", cmds.StatusAction)
bin.RegisterCommand(statusCmd)

logCmd := comandante.NewCommand("log", "查看 Tale 博客日志", cmds.LogAction)
bin.RegisterCommand(logCmd)

Expand Down
2 changes: 0 additions & 2 deletions pack.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@
rm -rf bin
mkdir -p bin/linux_64
mkdir -p bin/macOSX_64
mkdir -p bin/windows_64

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags '-w -s' -o bin/linux_64/tale-cli && upx bin/linux_64/tale-cli
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -ldflags '-w -s' -o bin/macOSX_64/tale-cli && upx bin/macOSX_64/tale-cli
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -ldflags '-w -s' -o bin/windows_64/tale-cli.exe && upx bin/windows_64/tale-cli.exe

0 comments on commit 254b074

Please sign in to comment.