inits/cmd/dkl-system-init/initctl.go

50 lines
753 B
Go
Raw Normal View History

2018-07-06 08:07:37 +00:00
package main
import (
"bufio"
"io"
"os"
"syscall"
)
func listenInitctl() {
const f = "/run/initctl"
if err := syscall.Mkfifo(f, 0700); err != nil {
fatal("can't create "+f+": ", err)
}
for {
func() {
fifo, err := os.Open(f)
if err != nil {
fatal("can't open "+f+": ", err)
}
defer fifo.Close()
r := bufio.NewReader(fifo)
for {
s, err := r.ReadString('\n')
if err == io.EOF {
break
}
if err != nil {
initLog.Print(f+": read error: ", err)
}
switch s {
case "prepare-shutdown\n":
prepareShutdown()
case "poweroff\n", "shutdown\n":
poweroff()
case "reboot\n":
reboot()
default:
initLog.Printf(f+": unknown command: %q", s)
}
}
}()
}
}