commit:     913b2ca53771742385d5c69164aefcaab634f012
Author:     William Hubbs <w.d.hubbs <AT> gmail <DOT> com>
AuthorDate: Sat Oct 28 00:22:09 2017 +0000
Commit:     William Hubbs <williamh <AT> gentoo <DOT> org>
CommitDate: Sat Oct 28 00:22:09 2017 +0000
URL:        https://gitweb.gentoo.org/proj/openrc.git/commit/?id=913b2ca5

supervise-daemon: use RC_SVCNAME as the first argument to the daemon

This makes ps show which service the supervisor is monitoring.

 sh/supervise-daemon.sh    |  4 ++--
 src/rc/supervise-daemon.c | 24 ++++++++++++++++--------
 2 files changed, 18 insertions(+), 10 deletions(-)

diff --git a/sh/supervise-daemon.sh b/sh/supervise-daemon.sh
index e5d8d461..f6e599d5 100644
--- a/sh/supervise-daemon.sh
+++ b/sh/supervise-daemon.sh
@@ -22,7 +22,7 @@ supervise_start()
        # The eval call is necessary for cases like:
        # command_args="this \"is a\" test"
        # to work properly.
-       eval supervise-daemon --start \
+       eval supervise-daemon "${RC_SVCNAME}" --start \
                ${retry:+--retry} $retry \
                ${chroot:+--chroot} $chroot \
                ${pidfile:+--pidfile} $pidfile \
@@ -49,7 +49,7 @@ supervise_stop()
        pidfile="${startpidfile:-$pidfile}"
        [ -n "$pidfile" ] || return 0
        ebegin "Stopping ${name:-$RC_SVCNAME}"
-       supervise-daemon --stop \
+       supervise-daemon "${RC_SVCNAME}" --stop \
                ${pidfile:+--pidfile} $chroot$pidfile \
                ${stopsig:+--signal} $stopsig
 

diff --git a/src/rc/supervise-daemon.c b/src/rc/supervise-daemon.c
index 1d0c3407..3989cbc7 100644
--- a/src/rc/supervise-daemon.c
+++ b/src/rc/supervise-daemon.c
@@ -561,8 +561,13 @@ int main(int argc, char **argv)
        applet = basename_c(argv[0]);
        atexit(cleanup);
        svcname = getenv("RC_SVCNAME");
+       if (!svcname)
+               eerrorx("%s: The RC_SVCNAME environment variable is not set", 
applet);
        openlog(applet, LOG_PID, LOG_DAEMON);
 
+       if (argc >= 1 && svcname && strcmp(argv[1], svcname))
+               eerrorx("%s: the first argument must be %s", applet, svcname);
+
        if ((tmp = getenv("SSD_NICELEVEL")))
                if (sscanf(tmp, "%d", &nicelevel) != 1)
                        eerror("%s: invalid nice level `%s' (SSD_NICELEVEL)",
@@ -583,6 +588,17 @@ int main(int argc, char **argv)
                }
        }
 
+       *cmdline = '\0';
+       c = argv;
+       while (c && *c) {
+               strcat(cmdline, *c);
+               strcat(cmdline, " ");
+               c++;
+       }
+       if (svcname) {
+               argc--;
+               argv++;
+       }
        while ((opt = getopt_long(argc, argv, getoptstring, longopts,
                    (int *) 0)) != -1)
                switch (opt) {
@@ -721,14 +737,6 @@ int main(int argc, char **argv)
 
        if (!pidfile && !reexec)
                eerrorx("%s: --pidfile must be specified", applet);
-
-       *cmdline = '\0';
-       c = argv;
-       while (c && *c) {
-               strcat(cmdline, *c);
-               strcat(cmdline, " ");
-               c++;
-       }
        endpwent();
        argc -= optind;
        argv += optind;

Reply via email to