2017-11-21 18:41:14 -0500 EST

Run a Go Binary as a Daemon under systemd

We want to run our Go program as a daemon on Linux, under systemd. Specifically, we want it to:

First, a little Go program for testing:

// stdout-stderr-test-daemon.go
package main

import (

func main() {
	stderr := log.New(os.Stderr, "", 0)
	for {
		fmt.Println("Hello, STDOUT")
		stderr.Println("Hello, STDERR")
		time.Sleep(time.Millisecond * 15000)

Build and install the binary:

$ go build stdout-stderr-test-daemon.go
# cp stdout-stderr-test-daemon /usr/local/bin/

Here’s our systemd unit file, /etc/systemd/system/stdout-stderr-test-daemon.service:

Description=Tests systemd to daemonize a Go binary



See systemd.unit(5), systemd.service(5), and systemd.exec(5) for unit file documentation.

Start our service, and watch it log:

# systemctl daemon-reload
# systemctl start stdout-stderr-test-daemon
# journalctl -u stdout-stderr-test-daemon
# journalctl -f -u stdout-stderr-test-daemon

To start the service at boot:

# systemctl enable stdout-stderr-test-daemon

#golang #systemd

⬅ Older Post Newer Post ➡