feat: initialize a basic go daemon
This commit is contained in:
parent
d8b6f3d4b7
commit
897675d529
1 changed files with 78 additions and 0 deletions
78
cmd/ahenkd-go/ahenkd-go.go
Normal file
78
cmd/ahenkd-go/ahenkd-go.go
Normal file
|
@ -0,0 +1,78 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
"os"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"github.com/sevlyar/go-daemon"
|
||||
"golang.org/x/exp/slices"
|
||||
)
|
||||
|
||||
const PidFile = "/run/ahenkd-go.pid"
|
||||
const ExecutablePath = "/usr/bin/ahenkd-go"
|
||||
const ConfDir = "/etc/ahenk-go/"
|
||||
|
||||
// FIXME there isn't any difference with Stop() function
|
||||
// TODO There can be a Start() function in it but start function doesnt work properly right now
|
||||
func Restart(pid, signal int) {
|
||||
Stop(pid, signal)
|
||||
}
|
||||
|
||||
// Stop Ahenkd Daemon with a specific PID (running from second copy)
|
||||
// do not forget to use also os.Exit() when using in ExecStop
|
||||
func Stop(pid, signal int) {
|
||||
log.Println("Stop Signal Caught")
|
||||
|
||||
// FILLME what you want to do before stopping daemon?
|
||||
|
||||
if err := syscall.Kill(pid, syscall.Signal(signal)); err == nil {
|
||||
log.Printf("Ahenk Daemon with pid number %v Successfully stopped", pid) // TODO Also log to /etc/ahenk-go/ahenkd.log
|
||||
} else {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
// Main Function that starts daemon and controls arguments
|
||||
func main() {
|
||||
if len(os.Args) == 2 && slices.Contains([]string{"start", "stop", "restart"}, os.Args[1]) {
|
||||
switch os.Args[1] {
|
||||
case "start":
|
||||
cntxt := &daemon.Context{
|
||||
PidFileName: PidFile,
|
||||
PidFilePerm: 0644,
|
||||
LogFileName: ConfDir + "ahenkd.log",
|
||||
LogFilePerm: 0640,
|
||||
WorkDir: ConfDir,
|
||||
Umask: 027,
|
||||
Args: []string{ExecutablePath, "start"},
|
||||
}
|
||||
d, err := cntxt.Reborn()
|
||||
if err != nil {
|
||||
log.Fatal("Daemon Reborn ERROR:", err)
|
||||
}
|
||||
if d != nil {
|
||||
return
|
||||
}
|
||||
defer cntxt.Release()
|
||||
log.Println("- - - - - - - - - - - - - - - - - -")
|
||||
log.Print("Daemon Succesfully Started")
|
||||
case "stop":
|
||||
i, _ := daemon.ReadPidFile(PidFile)
|
||||
Stop(i, 15)
|
||||
os.Exit(0)
|
||||
case "restart":
|
||||
i, _ := daemon.ReadPidFile(PidFile)
|
||||
Restart(i, 15)
|
||||
os.Exit(0)
|
||||
}
|
||||
}
|
||||
|
||||
for {
|
||||
// NEXT Usage
|
||||
log.Println("Working on it")
|
||||
time.Sleep(2 * time.Second)
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in a new issue