Skip to content
This repository has been archived by the owner on Feb 27, 2023. It is now read-only.

danawoodman/systemservice

Repository files navigation

systemservice

GoDoc MIT License Go Report Card Test Status code size

THIS IS A WORK IN PROGRESS AND IS NOT CURRENLTY USABLE

A cross-platform system service manager written in Go

Operating system support:

  • Windows (via sc.exe)
  • Mac (via launchctl)
  • Linux: (via systemd)

Install

go get -u github.com/danawoodman/systemservice

Usage

Please see the examples folder for examples.

First, setup a new service:

// Create a command to run.
cmd := systemservice.ServiceCommand{
  Label: "some-unique-id",
  Program: "echo",
  Args: []string{"Hello", "World", "!"},
}

// Create the service
serv := systemservice.New(cmd)

Now you can manage your service as needed:

serv.Install(start bool) error
serv.Start() error
serv.Restart() error
serv.Stop() error
serv.Uninstall() error
serv.Status() (systemservice.ServiceStatus, error)
serv.Running() bool

These commands are the same no matter the operating system target.

Platform Notes

Mac OSX (aka Darwin)

Replace <LABEL> and <NAME> with the values you setup in your Command.

  • If running as a root user:
    • Service plist is located at /Library/LaunchDaemons/<LABEL>.plist
    • Stdout logs are sent to /Library/Logs/<NAME>/<NAME>.stdout.log
    • Stderr logs are send to /Library/Logs/<NAME>/<NAME>.stderr.log
  • If running as a non-root user:
    • Service plist is located at ~/Library/LaunchAgents/<LABEL>.plist
    • Stdout logs are sent to ~/Library/Logs/<NAME>/<NAME>.stdout.log
    • Stderr logs are send to ~/Library/Logs/<NAME>/<NAME>.stderr.log

Linux (Systemd)

  • View logs with journalctl -u <LABEL>

Similar project

License

MIT. See license.md