mirror of
https://github.com/caddyserver/caddy.git
synced 2024-12-23 22:27:38 -05:00
Merge pull request #689 from tpng/restart-inproc
Add -restart=inproc option for in-process restart
This commit is contained in:
commit
8fc35edc3b
3 changed files with 33 additions and 0 deletions
|
@ -52,6 +52,11 @@ var (
|
|||
|
||||
// GracefulTimeout is the maximum duration of a graceful shutdown.
|
||||
GracefulTimeout time.Duration
|
||||
|
||||
// RestartMode is the mode used for restart,
|
||||
// "inproc" will restart in process,
|
||||
// otherwise default behavior is used (inproc on Windows, fork on Linux).
|
||||
RestartMode = ""
|
||||
)
|
||||
|
||||
var (
|
||||
|
|
|
@ -25,6 +25,10 @@ func init() {
|
|||
// downtime if on a POSIX-compatible system, or forcefully if on
|
||||
// Windows but with imperceptibly-short downtime.
|
||||
//
|
||||
// The behavior can be controlled by the RestartMode variable,
|
||||
// where "inproc" will restart forcefully in process same as
|
||||
// Windows on a POSIX-compatible system.
|
||||
//
|
||||
// The restarted application will use newCaddyfile as its input
|
||||
// configuration. If newCaddyfile is nil, the current (existing)
|
||||
// Caddyfile configuration will be used.
|
||||
|
@ -48,6 +52,10 @@ func Restart(newCaddyfile Input) error {
|
|||
return errors.New("TLS preload: " + err.Error())
|
||||
}
|
||||
|
||||
if RestartMode == "inproc" {
|
||||
return restartInProc(newCaddyfile)
|
||||
}
|
||||
|
||||
if len(os.Args) == 0 { // this should never happen, but...
|
||||
os.Args = []string{""}
|
||||
}
|
||||
|
@ -164,3 +172,22 @@ func getCertsForNewCaddyfile(newCaddyfile Input) error {
|
|||
|
||||
return nil
|
||||
}
|
||||
|
||||
// restartInProc restarts Caddy forcefully in process using newCaddyfile.
|
||||
func restartInProc(newCaddyfile Input) error {
|
||||
wg.Add(1) // barrier so Wait() doesn't unblock
|
||||
|
||||
err := Stop()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = Start(newCaddyfile)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
wg.Done() // take down our barrier
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
1
main.go
1
main.go
|
@ -33,6 +33,7 @@ func init() {
|
|||
flag.StringVar(&caddy.PidFile, "pidfile", "", "Path to write pid file")
|
||||
flag.StringVar(&caddy.Port, "port", caddy.DefaultPort, "Default port")
|
||||
flag.BoolVar(&caddy.Quiet, "quiet", false, "Quiet mode (no initialization output)")
|
||||
flag.StringVar(&caddy.RestartMode, "restart", "", "Restart mode (inproc for in process restart)")
|
||||
flag.StringVar(&revoke, "revoke", "", "Hostname for which to revoke the certificate")
|
||||
flag.StringVar(&caddy.Root, "root", caddy.DefaultRoot, "Root path to default site")
|
||||
flag.BoolVar(&version, "version", false, "Show version")
|
||||
|
|
Loading…
Reference in a new issue