[elbe-devel] [PATCH] elbepack: daemon: use service type notify

Eduard Krein eduard.krein at linutronix.de
Thu Jun 27 15:56:38 CEST 2024


Am 27.06.2024 um 09:09 schrieb Thomas Weißschuh:

> Make it easier to recognize startup errors.
>
> Signed-off-by: Thomas Weißschuh <thomas.weissschuh at linutronix.de>
Reviewed-by: Eduard Krein<eduard.krein at linutronix.de>
> ---
>   debian/python3-elbe-daemon.service |  2 +-
>   elbepack/commands/daemon.py        | 23 +++++++++++++++++++++++
>   2 files changed, 24 insertions(+), 1 deletion(-)
>
> diff --git a/debian/python3-elbe-daemon.service b/debian/python3-elbe-daemon.service
> index 97fea26d2b24..18165ba35ec1 100644
> --- a/debian/python3-elbe-daemon.service
> +++ b/debian/python3-elbe-daemon.service
> @@ -3,7 +3,7 @@ Description=ELBE Daemon
>   Documentation=man:elbe-daemon(1)
>   
>   [Service]
> -Type=simple
> +Type=notify
>   ExecStart=/usr/bin/elbe daemon --port=7588
>   
>   [Install]
> diff --git a/elbepack/commands/daemon.py b/elbepack/commands/daemon.py
> index 04bc1a6c6987..3703147a057f 100644
> --- a/elbepack/commands/daemon.py
> +++ b/elbepack/commands/daemon.py
> @@ -2,7 +2,10 @@
>   # SPDX-License-Identifier: GPL-3.0-or-later
>   # SPDX-FileCopyrightText: 2014, 2017 Linutronix GmbH
>   
> +import errno
>   import importlib
> +import os
> +import socket
>   from optparse import OptionParser
>   from pkgutil import iter_modules
>   
> @@ -15,6 +18,24 @@ def get_daemonlist():
>       return [x for _, x, _ in iter_modules(elbepack.daemons.__path__)]
>   
>   
> +# From sd_notify(3).
> +def _sd_notify(message):
> +    socket_path = os.environ.get('NOTIFY_SOCKET')
> +    if not socket_path:
> +        return
> +
> +    if socket_path[0] not in ('/', '@'):
> +        raise OSError(errno.EAFNOSUPPORT, 'Unsupported socket type')
> +
> +    # Handle abstract socket.
> +    if socket_path[0] == '@':
> +        socket_path = '\0' + socket_path[1:]
> +
> +    with socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM | socket.SOCK_CLOEXEC) as sock:
> +        sock.connect(socket_path)
> +        sock.sendall(message)
> +
> +
>   def run_command(argv):
>       daemons = get_daemonlist()
>   
> @@ -55,4 +76,6 @@ def run_command(argv):
>   
>       server.subscribe()
>       cherrypy.engine.start()
> +    _sd_notify(b'READY=1\n'
> +               b'STATUS=Serving requests\n')
>       cherrypy.engine.block()
>
> ---
> base-commit: 9eaf3ec03cc51e78edb40d4a6c4e149753f2472a
> change-id: 20240627-sd-notify-11455bd4daa0
>
> Best regards,

-- 
Eduard Krein
Linutronix GmbH | Bahnhofstrasse 3 | D-88690 Uhldingen-Mühlhofen
Phone: +49 7556 25 999 19; Fax.: +49 7556 25 999 99

Hinweise zum Datenschutz finden Sie hier (Informations on data privacy
can be found here): https://linutronix.de/legal/data-protection.php

Linutronix GmbH | Firmensitz (Registered Office): Uhldingen-Mühlhofen |
Registergericht (Registration Court): Amtsgericht Freiburg i.Br.,
HRB700 806 | Geschäftsführer (Managing Directors): Heinz Egger, Thomas
Gleixner, Tiffany Silva, Sean Fennelly, Jeffrey Schneiderman



More information about the elbe-devel mailing list