mirror of
https://github.com/TeaOSLab/EdgeNode.git
synced 2025-11-06 10:00:25 +08:00
优化系统服务逻辑
This commit is contained in:
@@ -7,17 +7,22 @@ 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]")
|
Usage(teaconst.ProcessName + " [-v|start|stop|restart|quit|test|daemon]")
|
||||||
|
|
||||||
app.On("test", func() {
|
app.On("test", func() {
|
||||||
err := nodes.NewNode().Test()
|
err := nodes.NewNode().Test()
|
||||||
@@ -25,6 +30,49 @@ func main() {
|
|||||||
_, _ = os.Stderr.WriteString(err.Error())
|
_, _ = os.Stderr.WriteString(err.Error())
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
app.On("daemon", func() {
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
app.On("quit", func() {
|
app.On("quit", func() {
|
||||||
pidFile := Tea.Root + "/bin/pid"
|
pidFile := Tea.Root + "/bin/pid"
|
||||||
data, err := ioutil.ReadFile(pidFile)
|
data, err := ioutil.ReadFile(pidFile)
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
@@ -94,6 +95,12 @@ func (this *SystemServiceManager) setupSystemd(params maps.Map) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 启动Service
|
||||||
|
go func() {
|
||||||
|
time.Sleep(5 * time.Second)
|
||||||
|
_ = exec.Command(systemctl, "start", teaconst.SystemdServiceName).Start()
|
||||||
|
}()
|
||||||
|
|
||||||
if output == "enabled" {
|
if output == "enabled" {
|
||||||
// 检查文件路径是否变化
|
// 检查文件路径是否变化
|
||||||
data, err := ioutil.ReadFile("/etc/systemd/system/" + teaconst.SystemdServiceName + ".service")
|
data, err := ioutil.ReadFile("/etc/systemd/system/" + teaconst.SystemdServiceName + ".service")
|
||||||
|
|||||||
@@ -126,10 +126,10 @@ Before=shutdown.target
|
|||||||
After=network-online.target
|
After=network-online.target
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
Type=forking
|
Type=simple
|
||||||
Restart=always
|
Restart=always
|
||||||
RestartSec=1s
|
RestartSec=1s
|
||||||
ExecStart=` + exePath + ` start
|
ExecStart=` + exePath + ` daemon
|
||||||
ExecStop=` + exePath + ` stop
|
ExecStop=` + exePath + ` stop
|
||||||
ExecReload=` + exePath + ` reload
|
ExecReload=` + exePath + ` reload
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user