-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathapp.go
52 lines (45 loc) · 1.19 KB
/
app.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package main
import (
"github.com/ayufan/golang-kardianos-service"
"os"
"os/exec"
)
type app struct {
logger service.Logger
watcherDoneChannel chan bool
}
func (a *app) OnStop() {
defer recover()
if a.watcherDoneChannel != nil {
close(a.watcherDoneChannel)
}
}
func (a *app) runScript(exe string, args ...string) {
cmd := exec.Command(exe, args...)
if output, err := cmd.CombinedOutput(); err != nil {
a.logger.Infof("Script (%s, %#v) failed to run. OUTPUT: %s. ERROR: %s", exe, args, cleanOutput(string(output)), err.Error())
} else {
a.logger.Infof("Script ran successfully with output: %s", cleanOutput(string(output)))
}
}
func (a *app) Run(logger service.Logger) {
a.logger = logger
defer func() {
if r := recover(); r != nil {
a.logger.Errorf("Run app error: %s", getStringFromRecovery(r))
}
}()
//At this point we expect arguments to be:
// 0 - This EXE path
// 1 - -name
// 2 - SERVICE NAME
// 3 - Starting the actual script exe + args
// 4 - ...
scriptExeAndArgs := os.Args[3:]
scriptExe := scriptExeAndArgs[0]
scriptArgs := []string{}
if len(scriptExeAndArgs) > 1 {
scriptArgs = scriptExeAndArgs[1:]
}
a.runScript(scriptExe, scriptArgs...)
}