mirror of
https://github.com/xxjwxc/public.git
synced 2025-09-26 20:01:19 +08:00
138 lines
2.6 KiB
Go
138 lines
2.6 KiB
Go
package server
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"time"
|
|
|
|
"data/config"
|
|
|
|
"github.com/jander/golog/logger"
|
|
"github.com/kardianos/service"
|
|
)
|
|
|
|
func OnStart(callBack func()) {
|
|
name, displayName, desc := config.GetServiceConfig()
|
|
p := &program{callBack}
|
|
sc := &service.Config{
|
|
Name: name,
|
|
DisplayName: displayName,
|
|
Description: desc,
|
|
}
|
|
s, err := service.New(p, sc)
|
|
//var s, err = service.NewService(name, displayName, desc)
|
|
if err != nil {
|
|
fmt.Printf("%s unable to start: %s", displayName, err)
|
|
return
|
|
}
|
|
|
|
fmt.Printf("Service \"%s\" do.\n", displayName)
|
|
|
|
if len(os.Args) > 1 {
|
|
var err error
|
|
verb := os.Args[1]
|
|
switch verb {
|
|
case "install":
|
|
{
|
|
err = s.Install()
|
|
if err != nil {
|
|
fmt.Printf("Failed to install: %s\n", err)
|
|
return
|
|
}
|
|
fmt.Printf("Service \"%s\" installed.\n", displayName)
|
|
}
|
|
case "remove":
|
|
{
|
|
err = s.Uninstall()
|
|
if err != nil {
|
|
fmt.Printf("Failed to remove: %s\n", err)
|
|
return
|
|
}
|
|
fmt.Printf("Service \"%s\" removed.\n", displayName)
|
|
}
|
|
case "run":
|
|
{
|
|
err = s.Run()
|
|
if err != nil {
|
|
fmt.Printf("Failed to run: %s\n", err)
|
|
return
|
|
}
|
|
fmt.Printf("Service \"%s\" run.\n", displayName)
|
|
}
|
|
case "start":
|
|
{
|
|
err = s.Start()
|
|
if err != nil {
|
|
fmt.Printf("Failed to start: %s\n", err)
|
|
return
|
|
}
|
|
fmt.Println("starting check service:", displayName)
|
|
|
|
ticker := time.NewTicker(1 * time.Second)
|
|
<-ticker.C
|
|
|
|
st, err := IsStart(name)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return
|
|
} else {
|
|
if st == Stopped || st == StopPending {
|
|
fmt.Printf("Service \"%s\" is Stopped.\n", displayName)
|
|
fmt.Println("can't to start service.")
|
|
return
|
|
}
|
|
}
|
|
fmt.Printf("Service \"%s\" started.\n", displayName)
|
|
}
|
|
case "stop":
|
|
{
|
|
err = s.Stop()
|
|
if err != nil {
|
|
fmt.Printf("Failed to stop: %s\n", err)
|
|
return
|
|
}
|
|
|
|
st, err := IsStart(name)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return
|
|
} else {
|
|
if st == Running || st == StartPending {
|
|
fmt.Printf("Service \"%s\" is Started.\n", displayName)
|
|
fmt.Println("can't to stop service.")
|
|
return
|
|
}
|
|
}
|
|
fmt.Printf("Service \"%s\" stopped.\n", displayName)
|
|
}
|
|
}
|
|
return
|
|
} else {
|
|
fmt.Print("Failed to read args\n")
|
|
//return
|
|
}
|
|
|
|
if err = s.Run(); err != nil {
|
|
logger.Error(err)
|
|
}
|
|
}
|
|
|
|
type program struct {
|
|
callBack func()
|
|
}
|
|
|
|
func (p *program) Start(s service.Service) error {
|
|
go p.run()
|
|
return nil
|
|
}
|
|
func (p *program) run() {
|
|
p.callBack()
|
|
}
|
|
func (p *program) Stop(s service.Service) error {
|
|
return nil
|
|
}
|
|
|
|
type ServiceTools interface {
|
|
IsStart(name string) (status int, err error)
|
|
}
|