7928 Add support for SMF_EXIT_NODAEMON

Review Request #1495 — Created Feb. 20, 2019 and submitted

citrus
illumos-gate
master
7928
3839cd5...
general
7928 Add support for SMF_EXIT_NODAEMON

Upstream of part of Joyent's OS-1159
Work by Jerry Jelinek


Some services do not need to run inside a zone and so currently spawn a background while/sleep loop so that the service contract does not become empty.

For example, the datalink-management service method contains:

if smf_is_nonglobalzone; then
    (while true ; do sleep 3600 ; done) & 
    exit $SMF_EXIT_OK
fi

and in an NGZ:

root@hawkeye:~# ps -ef | grep dlm
    root  4513  4302   0   Jan 22 ?           0:00 /sbin/sh /lib/svc/method/svc-dlmgmtd

root@hawkeye:~# pstack 4513
4513:   /sbin/sh /lib/svc/method/svc-dlmgmtd
 feeec3e7 pause    ()
 fed67c98 sleep    (e10, 0, ffffffff, fed67d5d, 0, 40ac2000) + 8a
 fed67da5 sh_delay (0, 40ac2000, 15, fed68195) + 55
 fed681b3 b_sleep  (2, 80afd98, fedef164, 0, 90a7369, 0) + 39d
 fedb9d6b sh_exec  (80afd50, 4, 80472cc, fedb8d86, 80472f4, fec00e00) + ff6
 fedbbba7 sh_exec  (80afcd4, 85, 8047678, fedbab50) + 2e32
 fedbab67 sh_exec  (80afdb4, 4, 80afc6c, fedb8d86, 80b2058, 0) + 1df2
 fedbb36e sh_exec  (80afe18, 4, 2, fedb8d86, 0, 0) + 25f9
 fedbbeeb sh_exec  (80afc3c, 24, 0, fed9835e) + 3176
 fed9859e exfile   (fedeee80, 80bac40) + 7c9
 fed9900c sh_main  (2, 8047de0, 0, 0) + 889
 08051040 main     (fedf0140, fef67388, 8047db8, 8050f08, 2, 8047de0) + 56
 08050f08 _start_crt (2, 8047de0, fefd0d40, 0, 0, 0) + 97
 08050dda _start   (2, 8047ec8, 8047ed1, 0, 8062260, 8047f11) + 1a

With this change, the service method can exit SMF_EXIT_NODAEMON which satisfies all dependencies and does not leave a process hanging around.

Most whitespace nit fixes are in the second patch set.

citrus
igork
  1. Ship It!
  2. 
      
jbk
  1. Ship It!
  2. 
      
andy_js
  1. 
      
  2. Is it worth making this conditional on SMF_EXIT_NODAEMON not being defined?
    1. I was thinking something like this:

      [ -n "$SMF_EXIT_NODAEMON" ] && exit $SMF_EXIT_NODAEMON
      (while true ; do sleep 3600 ; done) &
      exit $SMF_EXIT_OK
      
    2. I can do that.. it certainly won't hurt.

  3. usr/src/cmd/svc/shell/smf_include.sh (Diff revision 2)
     
     
    I like SMF_EXIT_TEMP_TRANSIENT better.
    1. I do too, that name makes more sense and that's what I'm used to using in Solaris; on Solaris IIRC it's also exit status 102 instead of 94.

      However I'm doing a straight upstream of what is already in illumos-joyent and illumos-omnios here and I don't know whether taking inspiration from the Solaris implementation is appropriate. It might be worth adding both names to smf_include.sh though.

  4. 
      
citrus
domag02
  1. Ship It!
  2. 
      
citrus
Review request changed

Status: Closed (submitted)

Loading...