basic daemon functionality, self-restarts without syscall.exec
running 'jfa-go start' will run it as a daemon in the background, and 'jfa-go stop' will tell it to quit via a unix socket. Self-restarts are now implented by simply exiting the main function (now called start) and running it again.
This commit is contained in:
@@ -2,10 +2,7 @@ package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"os/signal"
|
||||
"strings"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
@@ -699,24 +696,30 @@ func (app *appContext) Logout(gc *gin.Context) {
|
||||
// panic(fmt.Errorf("restarting"))
|
||||
// }
|
||||
|
||||
// func (app *appContext) Restart() error {
|
||||
// defer func() {
|
||||
// if r := recover(); r != nil {
|
||||
// signal.Notify(app.quit, os.Interrupt)
|
||||
// <-app.quit
|
||||
// }
|
||||
// }()
|
||||
// args := os.Args
|
||||
// // After a single restart, args[0] gets messed up and isnt the real executable.
|
||||
// // JFA_DEEP tells the new process its a child, and JFA_EXEC is the real executable
|
||||
// if os.Getenv("JFA_DEEP") == "" {
|
||||
// os.Setenv("JFA_DEEP", "1")
|
||||
// os.Setenv("JFA_EXEC", args[0])
|
||||
// }
|
||||
// env := os.Environ()
|
||||
// err := syscall.Exec(os.Getenv("JFA_EXEC"), []string{""}, env)
|
||||
// if err != nil {
|
||||
// return err
|
||||
// }
|
||||
// panic(fmt.Errorf("restarting"))
|
||||
// }
|
||||
|
||||
// no need to syscall.exec anymore!
|
||||
func (app *appContext) Restart() error {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
signal.Notify(app.quit, os.Interrupt)
|
||||
<-app.quit
|
||||
}
|
||||
}()
|
||||
args := os.Args
|
||||
// After a single restart, args[0] gets messed up and isnt the real executable.
|
||||
// JFA_DEEP tells the new process its a child, and JFA_EXEC is the real executable
|
||||
if os.Getenv("JFA_DEEP") == "" {
|
||||
os.Setenv("JFA_DEEP", "1")
|
||||
os.Setenv("JFA_EXEC", args[0])
|
||||
}
|
||||
env := os.Environ()
|
||||
err := syscall.Exec(os.Getenv("JFA_EXEC"), []string{""}, env)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
panic(fmt.Errorf("restarting"))
|
||||
RESTART <- true
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user