Skip to main content

Notify readiness to systemd by writing to stdout in a service

Project description

sdnotify-wrapper-py

This project provides a command line tool sdnotify-wrapper, that can be used to send a readiness notification from a service to systemd, by simply writing a newline to stdout. This can be an alternative to sd_notify(3) or systemd-notify(1), if you don't want your service to depend on systemd.

Installation

There's a package published on PyPi, so it can be installed either with pip, or globally with pipx:

$ sudo PIPX_HOME=/opt/pipx PIPX_BIN_DIR=/usr/local/bin pipx install sdnotify-wrapper-py

Usage

In your service write one line to stdout whenever the service is ready (make sure to write logs to stderr instead). For example in Python (characters other than a newline are ignored):

print("ready", flush=True)

Or in C:

write(1, "\n", 1)

Then create a systemd service file with Type=notify, e.g. if your service would be started with my-service --foo bar:

[Unit]
Description=My Service

[Service]
Type=notify
NotifyAccess=all
ExecStart=/usr/local/bin/sdnotify-wrapper my-service --foo bar

[Install]
WantedBy=multi-user.target

sdnotify-wrapper will then connect to the stdout of your service, notify systemd when it reads a newline and exit.

Why Python?

sdnotify-wrapper is a tool originally written by Laurent Bercot: sdnotify-wrapper.c. Unfortunately this tool is not packaged for any of the major Linux distributions, so it's not a great user experience if your service requires this mechanism.

I chose to reimplement this tool in Python mainly, because it's easier to install it with a Python package manager. In doing this, I hope this readiness notification mechanism will be adopted by more projects and the original tool will be packaged by more distributions.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sdnotify_wrapper_py-1.0.0.tar.gz (5.6 kB view details)

Uploaded Source

Built Distribution

sdnotify_wrapper_py-1.0.0-py3-none-any.whl (5.3 kB view details)

Uploaded Python 3

File details

Details for the file sdnotify_wrapper_py-1.0.0.tar.gz.

File metadata

  • Download URL: sdnotify_wrapper_py-1.0.0.tar.gz
  • Upload date:
  • Size: 5.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.7

File hashes

Hashes for sdnotify_wrapper_py-1.0.0.tar.gz
Algorithm Hash digest
SHA256 3f5e0c3de77128ee639f133b6df8a776899f7fe3f5fb4ed8e566ae28aca87003
MD5 ad7584c5ca9bd8f3575d28012f615a46
BLAKE2b-256 7f7d446a180b5153dcad5b7c570153565b0b18dde31c2ec92887876da9841f88

See more details on using hashes here.

File details

Details for the file sdnotify_wrapper_py-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for sdnotify_wrapper_py-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 538b83f4ae6a6ff3a0ffdcf0245ca5828de17e4a1630db069a1f8531c5a92269
MD5 f7cf1535a04cdf4651c3d86d30176f32
BLAKE2b-256 ee0d59047523e5e49017e5fbb197435f347715d2023fc331c5ab99f19802dc35

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page