netmaker/netclient/daemon/common.go
2022-08-02 18:46:30 +04:00

94 lines
1.8 KiB
Go

package daemon
import (
"errors"
"fmt"
"os"
"runtime"
"syscall"
"time"
"github.com/gravitl/netmaker/netclient/ncutils"
)
// InstallDaemon - Calls the correct function to install the netclient as a daemon service on the given operating system.
func InstallDaemon() error {
os := runtime.GOOS
var err error
switch os {
case "windows":
err = SetupWindowsDaemon()
case "darwin":
err = SetupMacDaemon()
case "linux":
err = SetupSystemDDaemon()
case "freebsd":
err = SetupFreebsdDaemon()
default:
err = errors.New("this os is not yet supported for daemon mode. Run join cmd with flag '--daemon off'")
}
return err
}
// Restart - restarts a system daemon
func Restart() error {
if ncutils.IsWindows() {
RestartWindowsDaemon()
return nil
}
pid, err := ncutils.ReadPID()
if err != nil {
return fmt.Errorf("failed to find pid %w", err)
}
p, err := os.FindProcess(pid)
if err != nil {
return fmt.Errorf("failed to find running process for pid %d -- %w", pid, err)
}
if err := p.Signal(syscall.SIGHUP); err != nil {
return fmt.Errorf("SIGHUP failed -- %w", err)
}
return nil
}
// Start - starts system daemon
func Start() error {
os := runtime.GOOS
var err error
switch os {
case "windows":
RestartWindowsDaemon()
case "darwin":
RestartLaunchD()
case "linux":
RestartSystemD()
case "freebsd":
FreebsdDaemon("restart")
default:
err = errors.New("this os is not yet supported for daemon mode. Run join cmd with flag '--daemon off'")
}
return err
}
// Stop - stops a system daemon
func Stop() error {
os := runtime.GOOS
var err error
time.Sleep(time.Second)
switch os {
case "windows":
RunWinSWCMD("stop")
case "darwin":
StopLaunchD()
case "linux":
StopSystemD()
case "freebsd":
FreebsdDaemon("stop")
default:
err = errors.New("no OS daemon to stop")
}
return err
}