All sysv service scripts (i.e. /etc/init.d/ scripts) are converted at
runtime into systemd service scripts by the systemd-sysv-generator
script; you can find them in /run/systemd/generator*/ directories.

The systemd-sysv-generator script normally does handle sysv script non-
zero exit codes as an error, but it handles two of them as a non-error
exit:

        /* Consider two special LSB exit codes a clean exit */                  
                                                                                
                                                                                
                               
        if (s->has_lsb)                                                         
                                                                                
                                                                                
                               
                fprintf(f,                                                      
                                                                                
                                                                                
                               
                        "SuccessExitStatus=%i %i\n",                            
                                                                                
                                                                                
                               
                        EXIT_NOTINSTALLED,                                      
                                                                                
                                                                                
                               
                        EXIT_NOTCONFIGURED);                                    
                                                                                
                                                                                
                               


So, this behavior is as-designed in systemd.  Any sysv service script returning 
either "not installed" (5) or "not configured" (6) error codes will be treated 
as successful/non-error status.

I suggest seeing if openNMS's sysv service script can be changed to
return an error value other than 5 or 6 - are they aware of this
problem?

Alternately, you can locally override the default systemd-sysv-generator
handling of return values, by creating a directory
"/etc/systemd/system/exitcode.service.d" and then creating a file in
that directory, for example
"/etc/systemd/system/exitcode.service.d/error_on_6.conf", with the
contents:

[Service]
SuccessExitStatus=


that will override the generated value (of "5 6") and will cause the 'exitcode' 
service to return error when the sysv init script returns any non-zero value.

I'm marking this bug as 'invalid' for systemd, as this behavior is as
designed.  If you really believe systemd behavior should be different, I
suggest opening a bug with upstream systemd.

** Changed in: systemd (Ubuntu)
       Status: New => Invalid

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1828883

Title:
  systemd sysv-compatibility eats exit codes

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/systemd/+bug/1828883/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to