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