mirror of
https://github.com/caddyserver/caddy.git
synced 2024-11-29 12:16:16 +08:00
44 lines
922 B
Go
44 lines
922 B
Go
|
package setup
|
||
|
|
||
|
import (
|
||
|
"os"
|
||
|
"os/exec"
|
||
|
|
||
|
"github.com/mholt/caddy/middleware"
|
||
|
)
|
||
|
|
||
|
func Startup(c *Controller) (middleware.Middleware, error) {
|
||
|
return nil, registerCallback(c, &c.Startup)
|
||
|
}
|
||
|
|
||
|
func Shutdown(c *Controller) (middleware.Middleware, error) {
|
||
|
return nil, registerCallback(c, &c.Shutdown)
|
||
|
}
|
||
|
|
||
|
// registerCallback registers a callback function to execute by
|
||
|
// using c to parse the line. It appends the callback function
|
||
|
// to the list of callback functions passed in by reference.
|
||
|
func registerCallback(c *Controller, list *[]func() error) error {
|
||
|
for c.Next() {
|
||
|
if !c.NextArg() {
|
||
|
return c.ArgErr()
|
||
|
}
|
||
|
|
||
|
command, args, err := middleware.SplitCommandAndArgs(c.Val())
|
||
|
if err != nil {
|
||
|
return c.Err(err.Error())
|
||
|
}
|
||
|
|
||
|
fn := func() error {
|
||
|
cmd := exec.Command(command, args...)
|
||
|
cmd.Stdout = os.Stdout
|
||
|
cmd.Stderr = os.Stderr
|
||
|
return cmd.Run()
|
||
|
}
|
||
|
|
||
|
*list = append(*list, fn)
|
||
|
}
|
||
|
|
||
|
return nil
|
||
|
}
|