//create another main() to run the overseer process //and then convert your old main() into a 'prog(state)' func main() { log.Println("Main: start PID: ", os.Getpid(), os.Getppid()) for _, env := range os.Environ() { if strings.HasPrefix(env, "GO") { log.Println("Main env: ", env) } } // Следует иметь в виду, что oerseer запускает два процесса. // Первый - процесс мониторинга занимается проверкой обновлений и принимает запросы // Второй - собственно процесс обработки запросов. Он перезапускается при обновлении // или если первый процесс получает сигнал SIGUSR2 (по умолчанию, может быть переопределён) // Overseer не является менеджером процессов. Если второй процесс завершится по каким-то причинам, // то будет завершен и первый. overseer.Run(overseer.Config{ // Debug: true, Program: prog, PreUpgrade: checkBinary, Address: ":3000", Fetcher: &fetcher.HTTP{ // Для тестирования в отдаче файла лучше всего воспользоваться `webfsd -F -p 4000 -l -` // Он отдаёт корректные заголовки при изменении файла URL: "http://localhost:4000/overseer-test", Interval: 5 * time.Second, }, }) }
//then create another 'main' which runs the upgrades //'main()' is run in the initial process func main() { overseer.Run(overseer.Config{ Program: prog, Address: ":5001", Fetcher: &fetcher.HTTP{ URL: "http://localhost:5002/myappnew", Interval: 1 * time.Second, }, Debug: false, //display log of overseer actions }) }
func main() { c := struct { URL string `type:"arg" help:"<url> of where to GET the binary"` Port int `help:"listening port"` Log bool `help:"enable logging"` }{ Port: 3000, Log: true, } opts.Parse(&c) overseer.Run(overseer.Config{ Log: c.Log, Program: func(state overseer.State) { //noop select {} }, Address: ":" + strconv.Itoa(c.Port), Fetcher: &fetcher.HTTP{ URL: c.URL, Interval: 1 * time.Second, }, }) }