-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathmain.go
142 lines (124 loc) · 3.32 KB
/
main.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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
package main
import (
"flag"
"fmt"
"office-convert/web"
"os"
"path/filepath"
rotatelogs "github.com/lestrrat-go/file-rotatelogs"
log "github.com/sirupsen/logrus"
"github.com/chai2010/winsvc"
)
var (
appPath string
flagServiceName = flag.String("service-name", "OfficeConvertService", "Set service name")
flagServiceDesc = flag.String("service-desc", "office convert service", "Set service description")
flagServiceInstall = flag.Bool("service-install", false, "Install service")
flagServiceUninstall = flag.Bool("service-remove", false, "Remove service")
flagServiceStart = flag.Bool("service-start", false, "Start service")
flagServiceStop = flag.Bool("service-stop", false, "Stop service")
flagHelp = flag.Bool("help", false, "Show usage and exit.")
)
func init() {
flag.Usage = func() {
fmt.Fprintf(os.Stderr, `Usage:
hello [options]...
Options:
`)
flag.PrintDefaults()
fmt.Fprintf(os.Stderr, "%s\n", `
Example:
# run hello server
$ go build -o hello.exe hello.go
$ hello.exe
# install hello as windows service
$ hello.exe -service-install
# start/stop hello service
$ hello.exe -service-start
$ hello.exe -service-stop
# remove hello service
$ hello.exe -service-remove
# help
$ hello.exe -h
Report bugs to <chaishushan{AT}gmail.com>.`)
}
// change to current dir
var err error
if appPath, err = winsvc.GetAppPath(); err != nil {
log.Fatal(err)
}
if err := os.Chdir(filepath.Dir(appPath)); err != nil {
log.Fatal(err)
}
file := "./server"
writer, _ := rotatelogs.New(
file+".%Y%m%d.log",
rotatelogs.WithRotationSize(20*1024*1024),
rotatelogs.WithRotationCount(10),
)
log.SetOutput(writer)
// logFile, err := os.OpenFile(file, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0766)
// if err != nil {
// panic(err)
// }
// log.SetOutput(logFile)
// log.SetFlags(log.Flags() | log.Lshortfile)
}
/// 下面这个main不支持出错自动恢复,暂时不用。选择windows定时任务启动代替即可
func mainBak() {
flag.Parse()
// install service
if *flagServiceInstall {
if err := winsvc.InstallService(appPath, *flagServiceName, *flagServiceDesc); err != nil {
log.Fatalf("installService(%s, %s): %v\n", *flagServiceName, *flagServiceDesc, err)
}
fmt.Printf("Done\n")
return
}
// remove service
if *flagServiceUninstall {
if err := winsvc.RemoveService(*flagServiceName); err != nil {
log.Fatalln("removeService:", err)
}
fmt.Printf("remove service Done\n")
log.Printf("remove service Done\n")
return
}
// start service
if *flagServiceStart {
if err := winsvc.StartService(*flagServiceName); err != nil {
log.Fatalln("startService:", err)
}
log.Printf("start service Done\n")
fmt.Printf("start service Done\n")
return
}
// stop service
if *flagServiceStop {
if err := winsvc.StopService(*flagServiceName); err != nil {
log.Fatalln("stopService:", err)
}
fmt.Printf("stop service Done\n")
log.Printf("stop service Done\n")
return
}
// run as service
if !winsvc.IsAnInteractiveSession() {
log.Println("main:", "runService")
if err := winsvc.RunAsService(*flagServiceName, StartServer, StopServer, false); err != nil {
log.Fatalf("svc.Run: %v\n", err)
}
return
}
// run as normal
StartServer()
}
func main() {
StartServer()
}
func StartServer() {
web.StartServer()
}
func StopServer() {
log.Println("StopServer")
}