mirror of
https://github.com/rynbrd/go-service.git
synced 2025-12-24 12:37:52 +08:00
57 lines
1.3 KiB
Go
57 lines
1.3 KiB
Go
package main
|
|
|
|
import (
|
|
"../service"
|
|
"fmt"
|
|
"os"
|
|
"runtime"
|
|
"time"
|
|
)
|
|
|
|
func main() {
|
|
commands := make(chan service.Command)
|
|
responses := make(chan service.Response)
|
|
events := make(chan service.Event)
|
|
svc, err := service.NewService([]string{"sleep", "10"})
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
os.Exit(1)
|
|
}
|
|
|
|
go svc.Run(commands, events)
|
|
go func() {
|
|
commands <- service.Command{service.Start, responses}
|
|
time.Sleep(5 * time.Second)
|
|
commands <- service.Command{service.Restart, responses}
|
|
time.Sleep(5 * time.Second)
|
|
commands <- service.Command{service.Stop, responses}
|
|
time.Sleep(5 * time.Second)
|
|
commands <- service.Command{service.Start, responses}
|
|
time.Sleep(15 * time.Second)
|
|
commands <- service.Command{service.Shutdown, responses}
|
|
}()
|
|
|
|
loop:
|
|
for {
|
|
select {
|
|
case event := <-events:
|
|
if event.Error == nil {
|
|
fmt.Printf("service is %s\n", event.State)
|
|
} else {
|
|
fmt.Printf("service is %s: %s\n", event.State, event.Error)
|
|
}
|
|
case response := <-responses:
|
|
if response.Success() {
|
|
fmt.Printf("command %s succeeded\n", response.Name)
|
|
if response.Name == service.Shutdown {
|
|
break loop
|
|
}
|
|
} else {
|
|
fmt.Printf("command %s failed: %s\n", response.Name, response.Error)
|
|
}
|
|
default:
|
|
runtime.Gosched()
|
|
}
|
|
}
|
|
}
|