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