示例#1
0
func (info *Info) serviceMain() error {
	if forkFlag.Value() {
		isParent, err := daemon.Fork()
		if err != nil {
			return err
		}

		if isParent {
			os.Exit(0)
		}

		daemonizeFlag.SetValue(true)
	}

	err := daemon.Init()
	if err != nil {
		return err
	}

	err = systemdUpdateStatus("\n")
	if err == nil {
		info.systemd = true
	}

	// default:                   daemon=no,  stderr=yes
	// --daemon:                  daemon=yes, stderr=no
	// systemd/--daemon --stderr: daemon=yes, stderr=yes
	// systemd --daemon:          daemon=yes, stderr=no
	daemonize := daemonizeFlag.Value()
	keepStderr := stderrFlag.Value()
	if !daemonize && info.systemd {
		daemonize = true
		keepStderr = true
	}

	if daemonize {
		err := daemon.Daemonize(keepStderr)
		if err != nil {
			return err
		}
	}

	if pidfileFlag.Value() != "" {
		info.pidFileName = pidfileFlag.Value()

		err = info.openPIDFile()
		if err != nil {
			return err
		}

		defer info.closePIDFile()
	}

	return info.runInteractively()
}
示例#2
0
func (info *Info) serviceMain() error {
	if forkFlag.Value() {
		isParent, err := daemon.Fork()
		if err != nil {
			return err
		}

		if isParent {
			os.Exit(0)
		}

		daemonizeFlag.SetValue(true)
	}

	err := daemon.Init()
	if err != nil {
		return err
	}

	err = systemdUpdateStatus("\n")
	if err == nil {
		info.systemd = true
	}

	if daemonizeFlag.Value() || info.systemd {
		err := daemon.Daemonize()
		if err != nil {
			return err
		}
	}

	if pidfileFlag.Value() != "" {
		info.pidFileName = pidfileFlag.Value()

		err = info.openPIDFile()
		if err != nil {
			return err
		}

		defer info.closePIDFile()
	}

	return info.runInteractively()
}