Send status to systemd on daemon start
authorMarcos Mello <marcosfrm@gmail.com>
Fri, 30 Nov 2018 11:25:07 +0000 (09:25 -0200)
committerAndrew Bartlett <abartlet@samba.org>
Mon, 17 Dec 2018 00:24:15 +0000 (01:24 +0100)
systemd service files run in no-forking mode (--foreground) since
8b6f58194da7e849cdb9d20712dff49b17a93a77.

Rearrange sd_notify() call in become_daemon() to only send status to systemd
in this mode (Type=notify is not designed to monitor forking). Drop READY=0
(it does nothing) and MAINPID= (unnecessary because the process spawned by
systemd is already the main PID).

Also remove STATUS= prefix from debug messages.

Signed-off-by: Marcos Mello <marcosfrm@gmail.com>
Reviewed-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Alexander Bokovoy <ab@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
lib/util/become_daemon.c

index 232eda69b6449d1be95c8b18e185d89f0de808ed..89991b7981cc50ba705fa9e83a1d18f49521ac6b 100644 (file)
@@ -73,14 +73,12 @@ void become_daemon(bool do_fork, bool no_session, bool log_stdout)
                        exit_daemon("Fork failed", errno);
                }
                if (newpid) {
-#if defined(HAVE_LIBSYSTEMD_DAEMON) || defined(HAVE_LIBSYSTEMD)
-                       sd_notifyf(0,
-                                  "READY=0\nSTATUS=Starting process...\n"
-                                  "MAINPID=%lu",
-                                  (unsigned long) newpid);
-#endif /* HAVE_LIBSYSTEMD_DAEMON */
                        _exit(0);
                }
+#if defined(HAVE_LIBSYSTEMD_DAEMON) || defined(HAVE_LIBSYSTEMD)
+       } else {
+               sd_notify(0, "STATUS=Starting process...");
+#endif
        }
 
        /* detach from the terminal */
@@ -120,7 +118,7 @@ void exit_daemon(const char *msg, int error)
                                  msg,
                                  error);
 #endif
-       DBG_ERR("STATUS=daemon failed to start: %s, error code %d\n",
+       DBG_ERR("daemon failed to start: %s, error code %d\n",
                msg, error);
        exit(1);
 }
@@ -134,7 +132,7 @@ void daemon_ready(const char *daemon)
        sd_notifyf(0, "READY=1\nSTATUS=%s: ready to serve connections...",
                   daemon);
 #endif
-       DBG_ERR("STATUS=daemon '%s' finished starting up and ready to serve "
+       DBG_ERR("daemon '%s' finished starting up and ready to serve "
                "connections\n", daemon);
 }
 
@@ -144,7 +142,7 @@ void daemon_status(const char *daemon, const char *msg)
                daemon = "Samba";
        }
 #if defined(HAVE_LIBSYSTEMD_DAEMON) || defined(HAVE_LIBSYSTEMD)
-       sd_notifyf(0, "\nSTATUS=%s: %s", daemon, msg);
+       sd_notifyf(0, "STATUS=%s: %s", daemon, msg);
 #endif
-       DBG_ERR("STATUS=daemon '%s' : %s\n", daemon, msg);
+       DBG_ERR("daemon '%s' : %s\n", daemon, msg);
 }