From 1e0cdc54f86cb29eca14af13aaa3ccfb07d46a20 Mon Sep 17 00:00:00 2001 From: WingLim <643089849@qq.com> Date: Sat, 30 Jul 2022 04:06:54 +0800 Subject: core: Windows service integration (#4790) Co-authored-by: Matthew Holt --- notify/notify_linux.go | 2 ++ notify/notify_other.go | 17 ++++------------- notify/notify_windows.go | 49 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 55 insertions(+), 13 deletions(-) create mode 100644 notify/notify_windows.go (limited to 'notify') diff --git a/notify/notify_linux.go b/notify/notify_linux.go index 8ba49d2..1e8da74 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 6ffec89..7fc618b 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 0000000..a551fc7 --- /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 +} -- cgit v1.2.3