go-self-restart/main.go

35 lines
590 B
Go

package main
import (
"fmt"
"os"
"os/exec"
"os/signal"
"time"
)
func main() {
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt)
file, err := os.OpenFile("out", os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0600)
if err != nil {
panic(err)
}
file.WriteString("start: " + os.Args[1] + "\n")
for {
select {
case <-c:
file.WriteString("bye\n")
exe, _ := os.Executable()
cmd := exec.Command(exe, os.Args[1:]...)
err := cmd.Start()
if err != nil {
fmt.Println(err)
}
os.Exit(0)
case <-time.Tick(time.Second):
file.WriteString("test\n")
}
}
}