Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

I read about how to enable and disable services in Ubuntu and it seems that there are different possibilities to manage them.

The first method I found is update-rc.d to add new services to startup, which aims on the /etc/init.d folder and its contents.

The other one I found is to edit .conf files in the /etc/init folder.

What's the recommended way to enable / disable / add services and why?

Could you please give a short bulletproof step by step example on how to add a service in Ubuntu and enable and disable it?

share|improve this question
21  
This is now documented in the paragraph Disabling a Job from Automatically Starting. –  Marcello Nuccio Aug 20 '11 at 17:12
    
For networking please see: askubuntu.com/questions/230698/… –  Jorge Castro Nov 13 '13 at 18:19
    
This would be helpful for those stuck on Fedora 12 and have landed here. In case linkrot chkconfig is what you are looking for. –  Bleeding Fingers Feb 27 at 10:49

7 Answers 7

up vote 226 down vote accepted

I can show you several ways which are documented on this excellent Upstart Cookbook. There are services that can be enabled/disabled using the GUI (Like the startup application) and then other ways of doing the same through the terminal.

For the Terminal you have several options. Open a terminal (Type "terminal" in the dash for example and open it) and keep on reading:

Enabling / Disabling a service

To toggle a service from starting or stopping permanently you would need to:

echo manual | sudo tee /etc/init/SERVICE.override

where the stanza manual will stop Upstart from automatically loading the service on next boot. Any service with the .override ending will take precedence over the original service file. You will only be able to start the service manually afterwards. If you do not want this then simply delete the .override. For example:

echo manual | sudo tee /etc/init/mysql.override

Will put the MySQL service into "manual" mode. If you do not want this, afterwards you can simply do

sudo rm /etc/init/mysql.override

and Reboot for the service to start automatically again. Of course to enable a service, the most common way is by installing it. If you install Apache, Nginx, MySQL or others, they automatically start upon finishing installation and will start every time the computer boots. Disabling as mentioned above will make state of the service "manual".

Temporary enabling/disabling services

To stop and start services temporarily (Does not enable / disable them for future boots), you can type sudo /etc/init.d/SERVICE_NAME. For example:

sudo /etc/init.d/apache2 stop (Will STOP the Apache service until Reboot or until you start it again).

sudo /etc/init.d/apache2 start (Will START the Apache service assuming it was stopped before.).

sudo /etc/init.d/apache2 status (Will tell you the STATUS of the service, if it is either enabled/running of disabled/NOT running.).

sudo /etc/init.d/apache2 restart (Will RESTART the service. This is most commonly used when you have changed, a config file. For example in this case, if you have changed either a PHP configuration or a Apache configuration. Restart will save you from having to stop/start with 2 command lines)

sudo /etc/init.d/apache2 (In this case, since you did not mention the ACTION to execute for the service, so it will show you all options available for that specific service

This of course can vary depending on the service, for example, with MySQL it would only mention that it is missing a parameter. For other services like networking service it would mention the small list of all options available.

IF the service was already converted to Upstart, you should see a message recommending to use the service command

UPSTART

As you can see it varies in several details when using the /etc/init.d/SERVICE way. If we would wanted to use the official upstart way (Note that, for the moment, not all services have been converted to upstart), we could use the following commands:

status SERVICE - This will tell us if a converted service is running or not. Note that this is deprecated in favor of start, stop, status & restart. It will also tell us if a service was not yet been converted to upstart:

A converted service would typically output the current status (Starting, Running, Stopping...) and process ID. A non converted service would give an error about an unknown job.

With upstart with have a simpler way to accessing the service options as you can see in the following examples:

sudo service mysql start (Would START a service)

sudo service mysql stop (Would STOP a service until reboot or start it again)

sudo service mysql restart (Would RESTART the service)

sudo service mysql status (Would show the current STATUS of the service)

But upstart is not limited to only converted services, it can also pass the instructions to non converted services because if offers compatibility with them.

Some shortcuts may only work with the service command above but not with the commands below unless they are 100% converted to upstart services:

START - sudo start mysql

STOP - sudo stop mysql

RESTART - sudo restart mysql

STATUS - sudo status smbd

OTHERS

There are other commands like initctl which can do nice things like list all services with the status for each of them: initctl list. It can also start, stop, restart a job as many other options found when you execute initctl help.

Now, what is the recommended way you ask, for Ubuntu it is Upstart, is an easy to use, easy to manage way to access and work with services, in the present and future of Ubuntu.

Upstart in the future will include options that could replace cron. For example, creating a timed based starting/stopping of services in a very user friendly way. A good guide is found here as the cookbook for upstart: http://upstart.ubuntu.com/cookbook/

share|improve this answer
    
I just installed 14.04 and this works for dovecot but not postgres, postfix, or clamd. –  Joe Murray Nov 10 at 4:02
    
@JoeMurray Thanks for the feedback. Let me get back to you with an answer when I get home. For what I remember, postgres for example can have multiple instances on Ubuntu, so it needs to be managed in another way. –  Luis Alvarado Nov 10 at 12:54
    
Ok I have tested postgres and postfix at least. Both work correctly ether using the old /etc/init.d path or the service command. Both do not work when using the upstart shortcuts (start,stop,restart,status) so I made a update on that part. You should at least be able to manage them using the other 2 ways. –  Luis Alvarado Nov 10 at 13:19
up vote 181 down vote
+150

Currently there are actually 2 different ways for software to be started as a service in Ubuntu. A service is defined here as a program run by the system in the background, as opposed to one started and run directly by the user.

The traditional way to start services in Linux was to place a script in /etc/init.d, and then use the update-rc.d command (or in RedHat based distros, chkconfig) to enable/disable it. This command, btw, uses some mildly complicated logic to create symlinks in /etc/rc#.d, that control the order of starting services. If you run ls /etc/rc2.d you can see the order that services will be killed (K##xxxx) and started (S##xxxx).

The issue with that was that when booting the system, everything had to be done in serial, one thing after another, making system boot times really slow. Attempts were made to parallelize this, but they were haphazard and hard to take full advantage of. This was the main reason that Upstart was created.

Upstart uses job definition files in /etc/init to define on what events a service should be started. So, while the system is booting, upstart processes various events, and then can start multiple services in parallel. This allows them to fully utilize the resources of the system, for instance, by starting a disk-bound service up while another CPU-bound service runs, or while the network is waiting for a dynamic IP address to be assigned.

You can see all of the upstart job files by running ls /etc/init/*.conf

Let me just stop here and say that if you don't know what a service is, or what it does, DO NOT disable it!

Not all services have been converted to upstart. While working on the server team at Canonical for the past few months, I've worked on a number of converted job files, and the nicest part is that it allows one to get rid of all the script "magic" and just put in a few commands here and there to define exactly how to start the service, and nothing more. But for now, only a handful of traditional network services, like squid and samba, have been converted.

In order to figure out if a service is upstart based, you can run the status command:

status servicename

If its an upstart job, it will show this:

$ status statd
statd start/running, process 942

But if its not, you'll see something more like this:

$ status apache2
status: Unknown job: apache2

In this case, apache2 has not been converted to upstart. So, to disable apache2 you just run

sudo update-rc.d apache2 disable
sudo service apache2 stop

Upstart job definitions do not have an update-rc.d command. To disable the job, you need to edit the job file directly to disable it. There are two ways to do this.

If you want to still be able to manually start it, then you need to comment out the 'start on' condition. Say you want to install samba, but not have it start automatically.. here is its job file (in natty):

description "SMB/CIFS File Server"
author      "Steve Langasek <steve.langasek@ubuntu.com>"

start on local-filesystems
stop on runlevel [!2345]

respawn

pre-start script
    RUN_MODE="daemons"

    [ -r /etc/default/samba ] && . /etc/default/samba

    [ "$RUN_MODE" = inetd ] && { stop; exit 0; }

    install -o root -g root -m 755 -d /var/run/samba
end script

exec smbd -F

To disable it, you can just put a # in front of the 'start on local-filesystems'. Note that while it won't start back up on boot, you still need to stop it this time with

sudo service smbd stop

If, however, you never want it to start, I'd suggest actually removing the package. If, however, you want it installed, but not startable, you can also do:

mv /etc/init/smbd.conf /etc/init/smbd.conf.disabled

Starting with the version of upstart that will be in 11.04, there is a new keyword that disables the 'start on' and 'stop on' stanzas, it is 'manual'. So another way to disable the service as of 11.04 is to do:

command using sudo
echo 'manual' | sudo tee /etc/init/mysql.override

command from root shell
echo manual >> /etc/init/mysql.override

And, hopefully real soon, you will be able to create an "override" file to disable a service without editing the job definition at all, by just putting the 'manual' keyword in it.

share|improve this answer
    
Great, thanks. Finally figured out how to stop a couple of "mystery services", and enough that I can start experimenting with services on my own. –  j-g-faustus Jan 6 '11 at 21:20
17  
Looks like 11.04 has override too. So echo manual >> /etc/init/<service>.override is prefered as it leaves the original .conf filke intact. Anyway, its still a shame that such a basic enable/disable took 3 years to develop, and theres no GUI for that. –  MestreLion May 27 '11 at 3:09
1  
update-rc.d is what really matters –  Tim Dec 2 '12 at 9:26
    
I assume that the *.override files are appended to *.conf files for computing the result but this is not documented anywhere. Another interpretation would be that *.override replaces the contents of *.conf but would break the exec and friends in the *.conf file. –  Mikko Rantalainen Feb 7 '13 at 13:04
2  
seems to much mor ehandle the original topic than the answer that has been tagged as the defintive answer by the original question poster. Thanks! :) –  Henning Apr 6 at 11:11

Try using sysv-rc-conf

sudo apt-get install sysv-rc-conf

and to start managing the services, execute

sudo sysv-rc-conf

Which will bring up interactive window like this

enter image description here

You can further navigate through pages using Ctrl+n for next page and Ctrl+p for previous page .You can enable and disable services by selecting SPACE on desired runlevels.

Another alternate would be Jobs-Admin by installing through

sudo apt-get install jobs-admin

Which also provides GUI like this

enter image description here

For showing more jobs , you have to tick the Show Protected Jobs from its menu.

And third option would be chkconfig,

sudo apt-get install chkconfig

It can be used via CLI chkconfig, showing list of On/Off jobs. Also we can view system services using chkconfig –list

Services can be turned on using

chkconfig <service> on

Services can be turned off using

chkconfig <service> off

And we can even add our own service, using a proper init script with proper headings.

chkconfig --add <service>

And another option can be referred here update-rc.d , explained briefly here.

Note that for Ubuntu Server 12.04, update-rc.d is used instead of chkconfig.

share|improve this answer
    
on ubuntu server: Package chkconfig is not available, but is referred to by another package. –  pwned Apr 22 '13 at 13:16
    
@pwned You are free to edit and post the updated info regarding server edition.Thank you. –  atenz Apr 26 '13 at 14:53
    
I did as you have suggested, now it is up for peer review. –  pwned Apr 26 '13 at 16:44
    
This works for me just fine. Its text based and interactive as well. :-) –  tuxdna Jan 3 at 6:27
    
jobs-admin doesn't allow to change jobs (Ubuntu 14.04), producing a crash report instead ;-) –  Sadi May 20 at 14:38

For those of us who run Ubuntu over ssh, I think the nicest option is rcconf - a text based program:

sudo apt-get install rcconf
sudo rcconf

alt text

Navigate with tab and arrow keys, press spacebar to enable/disable. Changes are persistent across restarts.

Screenshot borrowed from this blogpost, which also shows sysv-rc-conf - a similar tool that also lets you set the runlevel. (For those who happen to care enough about runlevels to wish to change them :)

Unfortunately, rcconf doesn't work with upstart (services listed in /etc/init/*), just with the traditional mechanism (ls -l /etc/init.d/* - the ones that are not symbolic links).

Fortunately, many of the services that are relevant when ssh-ing in to a server (Apache, Tomcat, mdadm, boinc-client...) haven't been moved to upstart yet.

share|improve this answer
6  
Does this still work with upstart? –  oKtosiTe Jan 6 '11 at 20:18
2  
Unfortunately, no. But it has worked for all the cases I have wanted to change - the upstart jobs seems to be mostly things I never want to disable - hardware clock, log daemon, network etc. (on Ubuntu server, at least). But it's something to be aware of (I wasn't :), I've updated the post. –  j-g-faustus Jan 6 '11 at 20:59
    
Unfortunately mysql was converted to upstart. And thats a service i only use when im doing some project. –  MestreLion May 27 '11 at 3:12
    
There's a bug with rcconf on Ubuntu 12.04 that prevents the program from starting. To solve the issue you need to install the dialog package. –  devius Jun 2 '12 at 22:08
    
@devius you can also work around that bug using sudo ln -s /bin/whiptail /usr/bin/whiptail –  Mahn Sep 11 '13 at 18:55

I found out that there is this GUI tool, something like BUM but compatible with Upstart:

  • Jobs-Admin

    sudo apt-get install jobs-admin
    
share|improve this answer
    
But it is too simple, and do not allow to change "protected jobs" ( what is that jobbs? Apple has Jobs, operating system has daemons!) –  kakaz Dec 19 '13 at 20:06
    
I doesn't even allow to change "unprotected jobs" (Ubuntu 14.04), producing a crash report instead ;-) –  Sadi May 20 at 14:37

Editing the existing upstart configuration file (as described above) is not such a good idea. An updated package could provide an updated config, and you'd had to repeat your changes over and over.

By taking a look at man 5 init one will find a more appropriate solution: using an override config. Short example: Say we have a service called "foobar", so there would be a file called /etc/init/foobar.conf with its upstart configuration. Now you don't want to remove that file, nor to modify it -- but neither you want this service to run? So place an override file next to it: /etc/init/foobar.override, containing (optionally the header with the description and) instead the start on / stop on lines you place a line with one word: manual. This way you tell upstart to basically use the foobar.conf, but override the startup definition to only start that service when manually enforced (via service foobar start in our example).

share|improve this answer

There is also the Boot-Up Manager.

To install: sudo apt-get install bum

Further info: http://www.marzocca.net/linux/bum.html

enter image description here

share|improve this answer

protected by Raja Dec 28 '13 at 13:19

Thank you for your interest in this question. Because it has attracted low-quality answers, posting an answer now requires 10 reputation on this site.

Would you like to answer one of these unanswered questions instead?

Not the answer you're looking for? Browse other questions tagged or ask your own question.