chiark / gitweb /
service: when invoking service processes in --user mode set MANAGERPID to PID of...
authorLennart Poettering <lennart@poettering.net>
Wed, 17 Oct 2012 23:18:50 +0000 (01:18 +0200)
committerLennart Poettering <lennart@poettering.net>
Wed, 17 Oct 2012 23:18:50 +0000 (01:18 +0200)
man/systemd.service.xml
src/core/service.c

index 11f6006636aab2e99f2f6c102379196112a62711..59ecf810fb82bebeb1497848df55ba27fe6a52b1 100644 (file)
                                 explicitly to a shell implementation
                                 of some kind. Example:
                                 <literal>ExecStart=/bin/sh -c 'dmesg | tac'</literal></para>
+
+                                <para>For services run by a user
+                                instance of systemd the special
+                                environment variable
+                                <literal>MANAGERPID</literal> is set
+                                to the PID of the systemd
+                                instance.</para>
                                 </listitem>
                         </varlistentry>
 
                                 variable substitution is supported
                                 here following the same scheme as for
                                 <varname>ExecStart=</varname>. One
-                                special environment variable is set:
-                                if known <literal>$MAINPID</literal> is
-                                set to the main process of the
-                                daemon, and may be used for command
-                                lines like the following:
-                                <command>/bin/kill -HUP
+                                additional special environment
+                                variables is set: if known
+                                <literal>$MAINPID</literal> is set to
+                                the main process of the daemon, and
+                                may be used for command lines like the
+                                following: <command>/bin/kill -HUP
                                 $MAINPID</command>.</para></listitem>
                         </varlistentry>
 
index 7f9a53af46413762bd1e73a1b282c1ac85c60e19..5742968d9130866edcd200d645b384fcbee21116 100644 (file)
@@ -1801,7 +1801,8 @@ static int service_spawn(
                 goto fail;
         }
 
-        if (!(our_env = new0(char*, 4))) {
+        our_env = new0(char*, 5);
+        if (!our_env) {
                 r = -ENOMEM;
                 goto fail;
         }
@@ -1824,10 +1825,14 @@ static int service_spawn(
                         goto fail;
                 }
 
-        if (!(final_env = strv_env_merge(2,
-                                         UNIT(s)->manager->environment,
-                                         our_env,
-                                         NULL))) {
+        if (s->meta.manager->running_as != SYSTEMD_SYSTEM)
+                if (asprintf(our_env + n_env++, "MANAGERPID=%lu", (unsigned long) getpid()) < 0) {
+                        r = -ENOMEM;
+                        goto fail;
+                }
+
+        final_env = strv_env_merge(2, UNIT(s)->manager->environment, our_env, NULL);
+        if (!final_env) {
                 r = -ENOMEM;
                 goto fail;
         }