Go Windows Service wrapper that plays nice with Linux.
Go
500
47 commits
updated Jul 25, 2024
Go Windows Service wrapper that plays nice with Linux. Windows tests here.
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 pathv1.2+ code is backwards compatible with previous versionsmodule awesomeProject
go 1.15
require github.com/judwhite/go-svc v1.2.0
import "github.com/judwhite/go-svc"
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
}
See the example directory for more examples, including installing and uninstalling binaries built in Go as Windows services.
go-svc is under the MIT license. See the LICENSE file for details.
Overall
Maintained
Code review
Go module
Latest release
Releases this year
152 followers · starred Jul 2023
220 followers · starred Feb 2023
31 followers · starred Nov 2022
5 followers · starred Oct 2022
Go Windows Service wrapper that plays nice with Linux.
Go
500
47 commits
updated Jul 25, 2024
Go Windows Service wrapper that plays nice with Linux. Windows tests here.
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 pathv1.2+ code is backwards compatible with previous versionsmodule awesomeProject
go 1.15
require github.com/judwhite/go-svc v1.2.0
import "github.com/judwhite/go-svc"
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
}
See the example directory for more examples, including installing and uninstalling binaries built in Go as Windows services.
go-svc is under the MIT license. See the LICENSE file for details.
Overall
Maintained
Code review
Go module
Latest release
Releases this year
152 followers · starred Jul 2023
220 followers · starred Feb 2023
31 followers · starred Nov 2022
5 followers · starred Oct 2022