MCPcopy Index your code
hub / github.com/GoEdgeLab/EdgeNode / installSystemdService

Method installSystemdService

internal/utils/service_linux.go:114–169  ·  view source on GitHub ↗

install systemd service

(systemd, exePath string, args []string)

Source from the content-addressed store, hash-verified

112
113// install systemd service
114func (this *ServiceManager) installSystemdService(systemd, exePath string, args []string) error {
115 var shortName = teaconst.SystemdServiceName
116 var longName = "GoEdge Node" // TODO 将来可以修改
117
118 var startCmd = exePath + " daemon"
119 bashPath, _ := executils.LookPath("bash")
120 if len(bashPath) > 0 {
121 startCmd = bashPath + " -c \"" + startCmd + "\""
122 }
123
124 var desc = `### BEGIN INIT INFO
125# Provides: ` + shortName + `
126# Required-Start: $all
127# Required-Stop:
128# Default-Start: 2 3 4 5
129# Default-Stop:
130# Short-Description: ` + longName + ` Service
131### END INIT INFO
132
133[Unit]
134Description=` + longName + ` Service
135Before=shutdown.target
136After=network-online.target
137
138[Service]
139Type=simple
140Restart=always
141RestartSec=1s
142ExecStart=` + startCmd + `
143ExecStop=` + exePath + ` stop
144ExecReload=` + exePath + ` reload
145
146[Install]
147WantedBy=multi-user.target`
148
149 // write file
150 err := os.WriteFile(systemdServiceFile, []byte(desc), 0777)
151 if err != nil {
152 return err
153 }
154
155 // stop current systemd service if running
156 _ = executils.NewTimeoutCmd(10*time.Second, systemd, "stop", shortName+".service").Start()
157
158 // reload
159 _ = executils.NewTimeoutCmd(10*time.Second, systemd, "daemon-reload").Start()
160
161 // enable
162 var cmd = executils.NewTimeoutCmd(10*time.Second, systemd, "enable", shortName+".service")
163 cmd.WithStderr()
164 err = cmd.Run()
165 if err != nil {
166 return fmt.Errorf("%w: %s", err, cmd.Stderr())
167 }
168 return nil
169}

Callers 1

InstallMethod · 0.95

Calls 6

WriteFileMethod · 0.80
WithStderrMethod · 0.80
ErrorfMethod · 0.80
StderrMethod · 0.80
StartMethod · 0.65
RunMethod · 0.45

Tested by

no test coverage detected