Go bindings to systemd. The project has several packages:
activation- for writing and using socket activation from Godaemon- for notifying systemd of service status changesdbus- for starting/stopping/inspecting running services and unitsjournal- for writing to systemd's logging service, journaldsdjournal- for reading from journald by wrapping its C APIlogin1- for integration with the systemd logind APImachine1- for registering machines/containers with systemdunit- for (de)serialization and comparison of unit files
An example HTTP server using socket activation can be quickly set up by following this README on a Linux machine running systemd:
https://github.com/coreos/go-systemd/tree/main/examples/activation/httpserver
The daemon package is an implementation of the sd_notify protocol.
It can be used to inform systemd of service start-up completion, watchdog events, and other status changes.
The dbus package connects to the systemd D-Bus API and lets you start, stop and introspect systemd units.
API documentation is available online.
Create /etc/dbus-1/system-local.conf that looks like this:
<!DOCTYPE busconfig PUBLIC
"-//freedesktop//DTD D-Bus Bus Configuration 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
<policy user="root">
<allow eavesdrop="true"/>
<allow eavesdrop="true" send_destination="*"/>
</policy>
</busconfig>
Using the pure-Go journal package you can submit journal entries directly to systemd's journal, taking advantage of features like indexed key/value pairs for each log entry.
The sdjournal package provides read access to the journal by wrapping around journald's native C API; consequently it requires cgo and the journal headers to be available.
The login1 package provides functions to integrate with the systemd logind API.
The machine1 package allows interaction with the systemd machined D-Bus API.
The unit package provides various functions for working with systemd unit files.