MCPcopy
hub / github.com/coreos/go-systemd

github.com/coreos/go-systemd @v22.7.0 sqlite

repository ↗ · DeepWiki ↗ · release v22.7.0 ↗
516 symbols 1,491 edges 66 files 340 documented · 66%
README

go-systemd

godoc minimum golang 1.23

Go bindings to systemd. The project has several packages:

  • activation - for writing and using socket activation from Go
  • daemon - for notifying systemd of service status changes
  • dbus - for starting/stopping/inspecting running services and units
  • journal - for writing to systemd's logging service, journald
  • sdjournal - for reading from journald by wrapping its C API
  • login1 - for integration with the systemd logind API
  • machine1 - for registering machines/containers with systemd
  • unit - for (de)serialization and comparison of unit files

Socket Activation

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

systemd Service Notification

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.

D-Bus

The dbus package connects to the systemd D-Bus API and lets you start, stop and introspect systemd units. API documentation is available online.

Debugging

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>

Journal

Writing to the Journal

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.

Reading from the Journal

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.

logind

The login1 package provides functions to integrate with the systemd logind API.

machined

The machine1 package allows interaction with the systemd machined D-Bus API.

Units

The unit package provides various functions for working with systemd unit files.

Extension points exported contracts — how you extend this code

Core symbols most depended-on inside this repo

getFunction
called by 37
sdjournal/functions.go
propDependency
called by 19
dbus/properties.go
PropExecStart
called by 17
dbus/properties.go
StartUnit
called by 15
dbus/methods.go
Close
called by 15
dbus/dbus.go
ListUnits
called by 12
dbus/methods.go
StopUnit
called by 10
dbus/methods.go
Send
called by 9
journal/journal_unix.go

Shape

Function 269
Method 204
Struct 37
TypeAlias 4
FuncType 2

Languages

Go100%

Modules by API surface

dbus/methods.go89 symbols
dbus/methods_test.go56 symbols
sdjournal/journal.go36 symbols
login1/dbus.go31 symbols
dbus/properties.go29 symbols
machine1/dbus.go23 symbols
unit/deserialize.go19 symbols
dbus/dbus.go19 symbols
import1/dbus.go17 symbols
dbus/subscription.go16 symbols
sdjournal/journal_test.go15 symbols
journal/journal_unix.go11 symbols

Dependencies from manifests, versioned

github.com/godbus/dbus/v5v5.1.0 · 1×
golang.org/x/sysv0.1.0 · 1×

For agents

$ claude mcp add go-systemd \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact