mirror of
https://github.com/TeaOSLab/EdgeNode.git
synced 2025-11-09 03:50:27 +08:00
增加service命令
This commit is contained in:
@@ -7,22 +7,17 @@ import (
|
|||||||
"github.com/TeaOSLab/EdgeNode/internal/nodes"
|
"github.com/TeaOSLab/EdgeNode/internal/nodes"
|
||||||
"github.com/iwind/TeaGo/Tea"
|
"github.com/iwind/TeaGo/Tea"
|
||||||
_ "github.com/iwind/TeaGo/bootstrap"
|
_ "github.com/iwind/TeaGo/bootstrap"
|
||||||
"github.com/iwind/TeaGo/lists"
|
|
||||||
"github.com/iwind/TeaGo/types"
|
"github.com/iwind/TeaGo/types"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
|
||||||
"net"
|
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
|
||||||
"syscall"
|
"syscall"
|
||||||
"time"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
app := apps.NewAppCmd().
|
app := apps.NewAppCmd().
|
||||||
Version(teaconst.Version).
|
Version(teaconst.Version).
|
||||||
Product(teaconst.ProductName).
|
Product(teaconst.ProductName).
|
||||||
Usage(teaconst.ProcessName + " [-v|start|stop|restart|quit|test|daemon]")
|
Usage(teaconst.ProcessName + " [-v|start|stop|restart|quit|test|service|daemon]")
|
||||||
|
|
||||||
app.On("test", func() {
|
app.On("test", func() {
|
||||||
err := nodes.NewNode().Test()
|
err := nodes.NewNode().Test()
|
||||||
@@ -31,47 +26,14 @@ func main() {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
app.On("daemon", func() {
|
app.On("daemon", func() {
|
||||||
path := os.TempDir() + "/edge-node.sock"
|
nodes.NewNode().Daemon()
|
||||||
isDebug := lists.ContainsString(os.Args, "debug")
|
})
|
||||||
isDebug = true
|
app.On("service", func() {
|
||||||
for {
|
err := nodes.NewNode().InstallSystemService()
|
||||||
conn, err := net.DialTimeout("unix", path, 1*time.Second)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if isDebug {
|
fmt.Println("[ERROR]install failed: " + err.Error())
|
||||||
log.Println("[DAEMON]starting ...")
|
|
||||||
}
|
|
||||||
|
|
||||||
// 尝试启动
|
|
||||||
err = func() error {
|
|
||||||
exe, err := os.Executable()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
cmd := exec.Command(exe)
|
|
||||||
err = cmd.Start()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
err = cmd.Wait()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}()
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
if isDebug {
|
|
||||||
log.Println("[DAEMON]", err)
|
|
||||||
}
|
|
||||||
time.Sleep(1 * time.Second)
|
|
||||||
} else {
|
|
||||||
time.Sleep(5 * time.Second)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
_ = conn.Close()
|
|
||||||
time.Sleep(5 * time.Second)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
fmt.Println("done")
|
||||||
})
|
})
|
||||||
app.On("quit", func() {
|
app.On("quit", func() {
|
||||||
pidFile := Tea.Root + "/bin/pid"
|
pidFile := Tea.Root + "/bin/pid"
|
||||||
|
|||||||
@@ -10,16 +10,20 @@ import (
|
|||||||
"github.com/TeaOSLab/EdgeNode/internal/apps"
|
"github.com/TeaOSLab/EdgeNode/internal/apps"
|
||||||
"github.com/TeaOSLab/EdgeNode/internal/caches"
|
"github.com/TeaOSLab/EdgeNode/internal/caches"
|
||||||
"github.com/TeaOSLab/EdgeNode/internal/configs"
|
"github.com/TeaOSLab/EdgeNode/internal/configs"
|
||||||
|
teaconst "github.com/TeaOSLab/EdgeNode/internal/const"
|
||||||
"github.com/TeaOSLab/EdgeNode/internal/events"
|
"github.com/TeaOSLab/EdgeNode/internal/events"
|
||||||
"github.com/TeaOSLab/EdgeNode/internal/remotelogs"
|
"github.com/TeaOSLab/EdgeNode/internal/remotelogs"
|
||||||
"github.com/TeaOSLab/EdgeNode/internal/rpc"
|
"github.com/TeaOSLab/EdgeNode/internal/rpc"
|
||||||
"github.com/TeaOSLab/EdgeNode/internal/utils"
|
"github.com/TeaOSLab/EdgeNode/internal/utils"
|
||||||
"github.com/go-yaml/yaml"
|
"github.com/go-yaml/yaml"
|
||||||
"github.com/iwind/TeaGo/Tea"
|
"github.com/iwind/TeaGo/Tea"
|
||||||
|
"github.com/iwind/TeaGo/lists"
|
||||||
"github.com/iwind/TeaGo/logs"
|
"github.com/iwind/TeaGo/logs"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
"log"
|
||||||
"net"
|
"net"
|
||||||
"os"
|
"os"
|
||||||
|
"os/exec"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
"runtime"
|
"runtime"
|
||||||
"syscall"
|
"syscall"
|
||||||
@@ -135,6 +139,68 @@ func (this *Node) Start() {
|
|||||||
select {}
|
select {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 实现守护进程
|
||||||
|
func (this *Node) Daemon() {
|
||||||
|
path := os.TempDir() + "/edge-node.sock"
|
||||||
|
isDebug := lists.ContainsString(os.Args, "debug")
|
||||||
|
isDebug = true
|
||||||
|
for {
|
||||||
|
conn, err := net.DialTimeout("unix", path, 1*time.Second)
|
||||||
|
if err != nil {
|
||||||
|
if isDebug {
|
||||||
|
log.Println("[DAEMON]starting ...")
|
||||||
|
}
|
||||||
|
|
||||||
|
// 尝试启动
|
||||||
|
err = func() error {
|
||||||
|
exe, err := os.Executable()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
cmd := exec.Command(exe)
|
||||||
|
err = cmd.Start()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
err = cmd.Wait()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
if isDebug {
|
||||||
|
log.Println("[DAEMON]", err)
|
||||||
|
}
|
||||||
|
time.Sleep(1 * time.Second)
|
||||||
|
} else {
|
||||||
|
time.Sleep(5 * time.Second)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
_ = conn.Close()
|
||||||
|
time.Sleep(5 * time.Second)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 安装系统服务
|
||||||
|
func (this *Node) InstallSystemService() error {
|
||||||
|
shortName := teaconst.SystemdServiceName
|
||||||
|
|
||||||
|
exe, err := os.Executable()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
manager := utils.NewServiceManager(shortName, teaconst.ProductName)
|
||||||
|
err = manager.Install(exe, []string{})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// 处理信号
|
// 处理信号
|
||||||
func (this *Node) listenSignals() {
|
func (this *Node) listenSignals() {
|
||||||
signals := make(chan os.Signal)
|
signals := make(chan os.Signal)
|
||||||
|
|||||||
Reference in New Issue
Block a user