Skip to content

Commit

Permalink
core: Windows service integration (caddyserver#4790)
Browse files Browse the repository at this point in the history
Co-authored-by: Matthew Holt <[email protected]>
  • Loading branch information
WingLim and mholt authored Jul 29, 2022
1 parent 2f43aa0 commit 1e0cdc5
Show file tree
Hide file tree
Showing 15 changed files with 105 additions and 24 deletions.
1 change: 0 additions & 1 deletion caddyconfig/caddyfile/formatter_fuzz.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
// limitations under the License.

//go:build gofuzz
// +build gofuzz

package caddyfile

Expand Down
1 change: 0 additions & 1 deletion caddyconfig/caddyfile/lexer_fuzz.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
// limitations under the License.

//go:build gofuzz
// +build gofuzz

package caddyfile

Expand Down
1 change: 0 additions & 1 deletion caddyconfig/httpcaddyfile/addresses_fuzz.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
// limitations under the License.

//go:build gofuzz
// +build gofuzz

package httpcaddyfile

Expand Down
1 change: 0 additions & 1 deletion cmd/removebinary.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
// limitations under the License.

//go:build !windows
// +build !windows

package caddycmd

Expand Down
1 change: 0 additions & 1 deletion duration_fuzz.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
// limitations under the License.

//go:build gofuzz
// +build gofuzz

package caddy

Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ require (
go.uber.org/atomic v1.9.0 // indirect
go.uber.org/multierr v1.6.0 // indirect
golang.org/x/mod v0.4.2 // indirect
golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e // indirect
golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e
golang.org/x/text v0.3.8-0.20211004125949-5bd84dd9b33b // indirect
golang.org/x/tools v0.1.7 // indirect
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
Expand Down
1 change: 0 additions & 1 deletion listeners_fuzz.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
// limitations under the License.

//go:build gofuzz
// +build gofuzz

package caddy

Expand Down
1 change: 0 additions & 1 deletion modules/caddyhttp/templates/frontmatter_fuzz.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
// limitations under the License.

//go:build gofuzz
// +build gofuzz

package templates

Expand Down
2 changes: 2 additions & 0 deletions notify/notify_linux.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
// See the License for the specific language governing permissions and
// limitations under the License.

// Package notify provides facilities for notifying process managers
// of state changes, mainly for when running as a system service.
package notify

import (
Expand Down
17 changes: 4 additions & 13 deletions notify/notify_other.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,19 +12,10 @@
// See the License for the specific language governing permissions and
// limitations under the License.

//go:build !linux
// +build !linux
//go:build !linux && !windows

package notify

func notifyReadiness() error {
return nil
}

func notifyReloading() error {
return nil
}

func notifyStopping() error {
return nil
}
func notifyReadiness() error { return nil }
func notifyReloading() error { return nil }
func notifyStopping() error { return nil }
49 changes: 49 additions & 0 deletions notify/notify_windows.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
// Copyright 2015 Matthew Holt and The Caddy Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package notify

import "golang.org/x/sys/windows/svc"

// globalStatus store windows service status, it can be
// use to notify caddy status.
var globalStatus chan<- svc.Status

func SetGlobalStatus(status chan<- svc.Status) {
globalStatus = status
}

func notifyReadiness() error {
if globalStatus != nil {
globalStatus <- svc.Status{
State: svc.Running,
Accepts: svc.AcceptStop | svc.AcceptShutdown,
}
}
return nil
}

func notifyReloading() error {
if globalStatus != nil {
globalStatus <- svc.Status{State: svc.StartPending}
}
return nil
}

func notifyStopping() error {
if globalStatus != nil {
globalStatus <- svc.Status{State: svc.StopPending}
}
return nil
}
1 change: 0 additions & 1 deletion replacer_fuzz.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
// limitations under the License.

//go:build gofuzz
// +build gofuzz

package caddy

Expand Down
49 changes: 49 additions & 0 deletions service_windows.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
// Copyright 2015 Matthew Holt and The Caddy Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package caddy

import (
"github.com/caddyserver/caddy/v2/notify"
"golang.org/x/sys/windows/svc"
)

func init() {
isService, err := svc.IsWindowsService()
if err != nil || isService {
return
}
go func() {
_ = svc.Run("", runner{})
}()
}

type runner struct{}

func (runner) Execute(args []string, request <-chan svc.ChangeRequest, status chan<- svc.Status) (bool, uint32) {
notify.SetGlobalStatus(status)
status <- svc.Status{State: svc.StartPending}

for {
req := <-request
switch req.Cmd {
case svc.Interrogate:
status <- req.CurrentStatus
case svc.Stop, svc.Shutdown:
status <- svc.Status{State: svc.StopPending}
exitProcessFromSignal("SIGINT")
return false, 0
}
}
}
1 change: 0 additions & 1 deletion sigtrap_nonposix.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
// limitations under the License.

//go:build windows || plan9 || nacl || js
// +build windows plan9 nacl js

package caddy

Expand Down
1 change: 0 additions & 1 deletion sigtrap_posix.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
// limitations under the License.

//go:build !windows && !plan9 && !nacl && !js
// +build !windows,!plan9,!nacl,!js

package caddy

Expand Down

0 comments on commit 1e0cdc5

Please sign in to comment.