mirror of
https://github.com/linuxkit/linuxkit.git
synced 2025-07-23 11:00:25 +00:00
Make hupper watch for proxy changes too
Signed-off-by: Dave Tucker <dt@docker.com>
This commit is contained in:
parent
7318e24b87
commit
bbd7a761cf
@ -13,16 +13,18 @@ start()
|
||||
|
||||
PIDFILE=/run/hupper.pid
|
||||
DOCKERPIDFILE=/run/docker.pid
|
||||
WATCH=$(mobyconfig watch /etc/docker/daemon.json)
|
||||
WATCH_CONFIG=$(mobyconfig watch /etc/docker/daemon.json)
|
||||
WATCH_PROXY=$(mobyconfig watch proxy)
|
||||
|
||||
[ -z "${WATCH}" ] && exit 1
|
||||
[ -z "${WATCH_CONFIG}" ] && exit 1
|
||||
[ -z "${WATCH_PROXY}" ] && exit 1
|
||||
|
||||
start-stop-daemon --start --quiet \
|
||||
--background \
|
||||
--exec /bin/hupper \
|
||||
--make-pidfile --pidfile ${PIDFILE} \
|
||||
-- -pidfile ${PIDFILE} -huppidfile ${DOCKERPIDFILE} \
|
||||
-path ${WATCH}
|
||||
-path ${WATCH_CONFIG} -path ${WATCH_PROXY}
|
||||
|
||||
eend $? "Failed to start hupper"
|
||||
}
|
||||
|
@ -2,23 +2,36 @@ package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"os"
|
||||
"os/exec"
|
||||
"strconv"
|
||||
"sync"
|
||||
"syscall"
|
||||
)
|
||||
|
||||
var (
|
||||
path string
|
||||
paths stringSlice
|
||||
huppidfile string
|
||||
pidfile string
|
||||
)
|
||||
|
||||
type stringSlice []string
|
||||
|
||||
func (s *stringSlice) String() string {
|
||||
return fmt.Sprintf("%s", *s)
|
||||
}
|
||||
|
||||
func (s *stringSlice) Set(value string) error {
|
||||
*s = append(*s, value)
|
||||
return nil
|
||||
}
|
||||
|
||||
func init() {
|
||||
flag.StringVar(&path, "path", "", "path of the file to watch")
|
||||
flag.Var(&paths, "path", "paths of the files to watch")
|
||||
flag.StringVar(&huppidfile, "huppidfile", "", "pidfile for process to signal")
|
||||
flag.StringVar(&pidfile, "pidfile", "", "my pidfile")
|
||||
}
|
||||
@ -27,7 +40,7 @@ func main() {
|
||||
log.SetFlags(0)
|
||||
flag.Parse()
|
||||
|
||||
if path == "" {
|
||||
if len(paths) < 1 {
|
||||
log.Fatal("watch path not set")
|
||||
}
|
||||
|
||||
@ -41,43 +54,53 @@ func main() {
|
||||
_ = ioutil.WriteFile(pidfile, pidbytes, 0644)
|
||||
}
|
||||
|
||||
watch, err := os.Open(path)
|
||||
if err != nil {
|
||||
log.Fatalln("Failed to open file", path, err)
|
||||
}
|
||||
// 43 bytes is the record size of the watch
|
||||
buf := make([]byte, 43)
|
||||
// initial state
|
||||
_, err = watch.Read(buf)
|
||||
if err != nil && err != io.EOF {
|
||||
log.Fatalln("Error reading watch file", err)
|
||||
}
|
||||
for {
|
||||
_, err := watch.Read(buf)
|
||||
var wg sync.WaitGroup
|
||||
wg.Add(len(paths))
|
||||
|
||||
for _, path := range paths {
|
||||
watch, err := os.Open(path)
|
||||
if err != nil {
|
||||
log.Fatalln("Failed to open file", path, err)
|
||||
}
|
||||
// 43 bytes is the record size of the watch
|
||||
buf := make([]byte, 43)
|
||||
// initial state
|
||||
_, err = watch.Read(buf)
|
||||
if err != nil && err != io.EOF {
|
||||
log.Fatalln("Error reading watch file", err)
|
||||
}
|
||||
if err == io.EOF {
|
||||
continue
|
||||
}
|
||||
// a few changes eg debug do not require a daemon restart
|
||||
// however at present we cannot check changes, and most do
|
||||
restart := true
|
||||
if restart {
|
||||
cmd := exec.Command("service", "docker", "restart")
|
||||
// not much we can do if it does not restart
|
||||
_ = cmd.Run()
|
||||
} else {
|
||||
bytes, err := ioutil.ReadFile(huppidfile)
|
||||
if err != nil {
|
||||
continue
|
||||
|
||||
go func() {
|
||||
for {
|
||||
_, err := watch.Read(buf)
|
||||
if err != nil && err != io.EOF {
|
||||
log.Fatalln("Error reading watch file", err)
|
||||
}
|
||||
if err == io.EOF {
|
||||
continue
|
||||
}
|
||||
// a few changes eg debug do not require a daemon restart
|
||||
// however at present we cannot check changes, and most do
|
||||
restart := true
|
||||
if restart {
|
||||
log.Println("Restarting docker")
|
||||
cmd := exec.Command("service", "docker", "restart")
|
||||
// not much we can do if it does not restart
|
||||
_ = cmd.Run()
|
||||
} else {
|
||||
bytes, err := ioutil.ReadFile(huppidfile)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
pidstring := string(bytes[:])
|
||||
pid, err := strconv.Atoi(pidstring)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
syscall.Kill(pid, syscall.SIGHUP)
|
||||
}
|
||||
}
|
||||
pidstring := string(bytes[:])
|
||||
pid, err := strconv.Atoi(pidstring)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
syscall.Kill(pid, syscall.SIGHUP)
|
||||
}
|
||||
}()
|
||||
}
|
||||
wg.Wait()
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user