[Bug 974147] Re: /lib/init/upstart-job should not start/restart a job which is disabled.

Launchpad Bug Tracker 974147 at bugs.launchpad.net
Mon Apr 16 15:56:31 UTC 2012


This bug was fixed in the package upstart - 1.5-0ubuntu5

---------------
upstart (1.5-0ubuntu5) precise; urgency=low

  * debian/upstart-job: Add in handling for disabled jobs:
    - Do not restart a job if disabled, unless job was forcibly started.
    - Do stop a disabled job that was forcibly started.
    Resolves issue where 'invoke-rc.d restart' erroneously started disabled
    jobs on package upgrade (LP: #974147)
 -- James Hunt <james.hunt at ubuntu.com>   Tue, 10 Apr 2012 09:19:03 +0100

** Changed in: upstart (Ubuntu)
       Status: In Progress => Fix Released

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

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

Status in “upstart” package in Ubuntu:
  Fix Released

Bug description:
  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.

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




More information about the foundations-bugs mailing list