[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