Public bug reported:

Package maintainer scripts often call:

    invoke-rc.d $service restart

... to ensure that if a service is running, it gets restarted after
upgrade. invoke-rc.d is a SysV tool and the premise here is that calling
/etc/init.d/$service will be a NOP if the service in question has not
been enabled (for example /etc/default/$service might contain
'DISABLED=1' or similar).

However, with Upstart, this premise isn't correct. For an Upstart job,
calling 'invoke-rc.d $service restart' calls /lib/init/upstart-job which
then calls "stop $service; start $service". The problem here is that if
the service was disabled using the 'manual' stanza, *it will still be
started*.

This happens since what 'manual' does is to clear the 'start on' condition such 
that if an admin
disables a job using 'manual', it won't start on boot but it *will* start if 
forced with 'start'.
So, given the following, foo *will* start:

sudo stop foo
echo manual|sudo tee -a /etc/init/foo.override
sudo invoke-rc.d foo restart
      \-> /lib/init/upstart-job
            \-> start foo

To counter this, we could add a '--honour-manual' option to 'start' and make 
/lib/init/upstart-job
specify this option such that 'invoke-rc.d <name> restart' would only start a 
job if it had not
been explicitly disabled.

In fact, there is a simpler method: have /lib/init/upstart-job check to see if 
the job has a
'start on' condition. Crucially, note that the command below will *not* show a 
'start on'
condition if the job was disabled using the 'manual' stanza:

    initctl show-config -e "$JOB"|grep 'start on'

Then:

- if the job is running and has a 'start on', stop then start it (existing 
behaviour).
- if the job is not running and has a 'start on', start it (existing behaviour).
- if the job is running and does not have a 'start on', stop then start it
  (since it was forcibly started).
- if the job is not running and does not have a 'start on', do nothing.

The last scenario being the key one.

** Affects: upstart (Ubuntu)
     Importance: Undecided
         Status: New

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

Title:
  /lib/init/upstart-job should not start/restart a job which is
  disabled.

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

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

Reply via email to