50 lines
753 B
Go
50 lines
753 B
Go
|
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)
|
||
|
}
|
||
|
}
|
||
|
}()
|
||
|
}
|
||
|
}
|