If you are on Ubuntu 11.04 or later, you can use the manual
keyword and .override files in /etc/init to disable automatic starting:
sudo sh -c 'echo manual >> /etc/init/mysql.override'
manual
effectively removes the start on
stanza from the job's config.
If you are on Ubuntu 10.04, you can do this:
sudo sh -c 'echo start on never >> /etc/init/mysql.conf'
The last start on
in the file will override any previous ones, so this should work, though it assumes there is no event called never
.
Functionally, there is no difference between any of these invocation methods.
start
and stop
are symbolic links to initctl. service
is a shell script that determines whether to execute the init script or use initctl.
The simplest way to see what is an Upstart job is to take a look at /etc/init/
. Everything in there is an Upstart job. If you ls -l /etc/init.d/
you'll see every service and system task. The SysV init jobs will be real files, while the Upstart jobs will be symlinks to /lib/init/upstart-job
which will properly invoke the Upstart job.
In other words, you can also invoke Upstart jobs by calling, for example, /etc/init.d/apport restart
, though the output will suggest using service, start, or stop instead.
So, in practice it makes no difference (yet!). But if I were scripting something, I would certainly use service, start, or stop as there is almost no chance that will deprecated, whereas calling services through /etc/init.d/ could go away down the road (though probably not any time soon).
A note on disabling services: renaming the .conf file works, but I don't recommend it. You might disable a service that way, but if there is a package upgrade available, dpkg will copy down a fresh copy of the Upstart job and without intending it, your service is enabled again. The correct way to disable an Upstart job is to use a .override file which leaves the original job intact.
For example, to disable apport, simply create a file called /etc/init/apport.override
that contains the word "manual".
# echo "manual" > /etc/init/apport.override
Personally, I would avoid using sysv-rc-conf
. It may be safe enough to use it to modify SysV jobs, but I'm not sure; it doesn't seem to support Upstart jobs, and there's no way to tell form the interface which is which. I would stick with update-rc.d
for managing SysV scripts.
For more Upstart information see:
- The Upstart Cookbook: http://upstart.ubuntu.com/cookbook/
- The command
man 5 init
: http://manpages.ubuntu.com/manpages/precise/en/man5/init.5.html
Best Answer
Regarding services that are defined in both SysV and upstart, generally if you restart it through SysV you'll see something like this:
What I take this to mean is that Upstart is preferred for these services, and the SysV implementation is just a wrapper.
Also, I think you have the meaning of the directories backwards. /etc/init is upstart configuration, /etc/init.d is the SysV compatibility, but it is just symlinks to upstart for these type of services.