123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- 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
- }
|