Skip to content
forked from judwhite/go-svc

Go Windows Service wrapper that plays nice with Linux.

License

Notifications You must be signed in to change notification settings

mreiferson/go-svc

 
 

Repository files navigation

go-svc

Go Reference MIT License Go Report Card Build Status

Go Windows Service wrapper that plays nice with Linux. Windows tests here.

Project Status

  • Used in Production.
  • Maintained. Issues and Pull Requests will be responded to.

Go Modules

  • Please note the import path and go.mod change from github.com/judwhite/go-svc/svc to github.com/judwhite/go-svc for v1.2+
  • v1.1.3 and earlier can be imported using the previous import path
  • v1.2+ code is backwards compatible with previous versions
module awesomeProject

go 1.15

require github.com/judwhite/go-svc v1.2.0
import "github.com/judwhite/go-svc"

Example

package main

import (
	"log"
	"sync"

	"github.com/judwhite/go-svc"
)

// program implements svc.Service
type program struct {
	wg   sync.WaitGroup
	quit chan struct{}
}

func main() {
	prg := &program{}

	// Call svc.Run to start your program/service.
	if err := svc.Run(prg); err != nil {
		log.Fatal(err)
	}
}

func (p *program) Init(env svc.Environment) error {
	log.Printf("is win service? %v\n", env.IsWindowsService())
	return nil
}

func (p *program) Start() error {
	// The Start method must not block, or Windows may assume your service failed
	// to start. Launch a Goroutine here to do something interesting/blocking.

	p.quit = make(chan struct{})

	p.wg.Add(1)
	go func() {
		log.Println("Starting...")
		<-p.quit
		log.Println("Quit signal received...")
		p.wg.Done()
	}()

	return nil
}

func (p *program) Stop() error {
	// The Stop method is invoked by stopping the Windows service, or by pressing Ctrl+C on the console.
	// This method may block, but it's a good idea to finish quickly or your process may be killed by
	// Windows during a shutdown/reboot. As a general rule you shouldn't rely on graceful shutdown.

	log.Println("Stopping...")
	close(p.quit)
	p.wg.Wait()
	log.Println("Stopped.")
	return nil
}

More Examples

See the example directory for more examples, including installing and uninstalling binaries built in Go as Windows services.

Similar Projects

License

go-svc is under the MIT license. See the LICENSE file for details.

About

Go Windows Service wrapper that plays nice with Linux.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Go 98.0%
  • Batchfile 2.0%