summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorWingLim <[email protected]>2022-07-30 04:06:54 +0800
committerGitHub <[email protected]>2022-07-29 14:06:54 -0600
commit1e0cdc54f86cb29eca14af13aaa3ccfb07d46a20 (patch)
tree53e3baf13dea0f276db192348bf1014f2746c220
parent2f43aa062925e0e8ff114e6035f3bc1b2f7b8e4a (diff)
downloadcaddy-1e0cdc54f86cb29eca14af13aaa3ccfb07d46a20.tar.gz
caddy-1e0cdc54f86cb29eca14af13aaa3ccfb07d46a20.zip
core: Windows service integration (#4790)
Co-authored-by: Matthew Holt <[email protected]>
-rw-r--r--caddyconfig/caddyfile/formatter_fuzz.go1
-rw-r--r--caddyconfig/caddyfile/lexer_fuzz.go1
-rw-r--r--caddyconfig/httpcaddyfile/addresses_fuzz.go1
-rw-r--r--cmd/removebinary.go1
-rw-r--r--duration_fuzz.go1
-rw-r--r--go.mod2
-rw-r--r--listeners_fuzz.go1
-rw-r--r--modules/caddyhttp/templates/frontmatter_fuzz.go1
-rw-r--r--notify/notify_linux.go2
-rw-r--r--notify/notify_other.go17
-rw-r--r--notify/notify_windows.go49
-rw-r--r--replacer_fuzz.go1
-rw-r--r--service_windows.go49
-rw-r--r--sigtrap_nonposix.go1
-rw-r--r--sigtrap_posix.go1
15 files changed, 105 insertions, 24 deletions
diff --git a/caddyconfig/caddyfile/formatter_fuzz.go b/caddyconfig/caddyfile/formatter_fuzz.go
index c07a22683..7c1fc6439 100644
--- a/caddyconfig/caddyfile/formatter_fuzz.go
+++ b/caddyconfig/caddyfile/formatter_fuzz.go
@@ -13,7 +13,6 @@
// limitations under the License.
//go:build gofuzz
-// +build gofuzz
package caddyfile
diff --git a/caddyconfig/caddyfile/lexer_fuzz.go b/caddyconfig/caddyfile/lexer_fuzz.go
index 179fd87c9..6f75694b5 100644
--- a/caddyconfig/caddyfile/lexer_fuzz.go
+++ b/caddyconfig/caddyfile/lexer_fuzz.go
@@ -13,7 +13,6 @@
// limitations under the License.
//go:build gofuzz
-// +build gofuzz
package caddyfile
diff --git a/caddyconfig/httpcaddyfile/addresses_fuzz.go b/caddyconfig/httpcaddyfile/addresses_fuzz.go
index be873ef15..364ff971b 100644
--- a/caddyconfig/httpcaddyfile/addresses_fuzz.go
+++ b/caddyconfig/httpcaddyfile/addresses_fuzz.go
@@ -13,7 +13,6 @@
// limitations under the License.
//go:build gofuzz
-// +build gofuzz
package httpcaddyfile
diff --git a/cmd/removebinary.go b/cmd/removebinary.go
index adef6b104..c74d2b2e2 100644
--- a/cmd/removebinary.go
+++ b/cmd/removebinary.go
@@ -13,7 +13,6 @@
// limitations under the License.
//go:build !windows
-// +build !windows
package caddycmd
diff --git a/duration_fuzz.go b/duration_fuzz.go
index aa01a46a3..8a1f0c7cb 100644
--- a/duration_fuzz.go
+++ b/duration_fuzz.go
@@ -13,7 +13,6 @@
// limitations under the License.
//go:build gofuzz
-// +build gofuzz
package caddy
diff --git a/go.mod b/go.mod
index c30afdf7e..026d06dfb 100644
--- a/go.mod
+++ b/go.mod
@@ -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
diff --git a/listeners_fuzz.go b/listeners_fuzz.go
index 95f1e3271..02b65ab2e 100644
--- a/listeners_fuzz.go
+++ b/listeners_fuzz.go
@@ -13,7 +13,6 @@
// limitations under the License.
//go:build gofuzz
-// +build gofuzz
package caddy
diff --git a/modules/caddyhttp/templates/frontmatter_fuzz.go b/modules/caddyhttp/templates/frontmatter_fuzz.go
index 361b4b626..7af301312 100644
--- a/modules/caddyhttp/templates/frontmatter_fuzz.go
+++ b/modules/caddyhttp/templates/frontmatter_fuzz.go
@@ -13,7 +13,6 @@
// limitations under the License.
//go:build gofuzz
-// +build gofuzz
package templates
diff --git a/notify/notify_linux.go b/notify/notify_linux.go
index 8ba49d2cd..1e8da7428 100644
--- a/notify/notify_linux.go
+++ b/notify/notify_linux.go
@@ -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 (
diff --git a/notify/notify_other.go b/notify/notify_other.go
index 6ffec89bd..7fc618b7b 100644
--- a/notify/notify_other.go
+++ b/notify/notify_other.go
@@ -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 }
diff --git a/notify/notify_windows.go b/notify/notify_windows.go
new file mode 100644
index 000000000..a551fc7e4
--- /dev/null
+++ b/notify/notify_windows.go
@@ -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
+}
diff --git a/replacer_fuzz.go b/replacer_fuzz.go
index a837e33f8..50fb0b611 100644
--- a/replacer_fuzz.go
+++ b/replacer_fuzz.go
@@ -13,7 +13,6 @@
// limitations under the License.
//go:build gofuzz
-// +build gofuzz
package caddy
diff --git a/service_windows.go b/service_windows.go
new file mode 100644
index 000000000..7590fc3ca
--- /dev/null
+++ b/service_windows.go
@@ -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
+ }
+ }
+}
diff --git a/sigtrap_nonposix.go b/sigtrap_nonposix.go
index 7855e13a5..f80f593b0 100644
--- a/sigtrap_nonposix.go
+++ b/sigtrap_nonposix.go
@@ -13,7 +13,6 @@
// limitations under the License.
//go:build windows || plan9 || nacl || js
-// +build windows plan9 nacl js
package caddy
diff --git a/sigtrap_posix.go b/sigtrap_posix.go
index 706d0c257..7033f1635 100644
--- a/sigtrap_posix.go
+++ b/sigtrap_posix.go
@@ -13,7 +13,6 @@
// limitations under the License.
//go:build !windows && !plan9 && !nacl && !js
-// +build !windows,!plan9,!nacl,!js
package caddy