223

How do I stop Apache2 from automatically starting on boot? I can't seem to find an option that disables the automatic start-up when I turn on the machine.

2
  • 1
    Perhaps someone can be more specific, but I can point you in the right direction... in /etc, there are directories for rc*.d, which contain all the start/stop scripts, called, I think, init scripts. You'll see links to scripts that are in /etc/init.d, and starting with either "k" or "s", for "kill" or "start", and a number which is the ordering. Aug 1 '12 at 2:27
  • Yes, I knew about the /etc/rcX.d directories, but I searched for it to find out about some nicer tool, than just manually renaming files (life is too short). update-rc.d has filled this void. Sep 26 '14 at 8:53
212

you could simply disable it by:

sudo update-rc.d apache2 disable

and then if you would like to enable it again:

sudo update-rc.d apache2 enable

depending on the project i am working on, it is handy to have the service conveniently available, if i wish to re-enable it.

10
  • 4
    enable gave me an error like runlevel arguments (none) do not match LSB Default-Start values, but sudo update-rc.d apache2 defaults appears to have re-enabled it successfully.
    – here
    Jan 13 '14 at 3:58
  • 2
    @here sudo update-rc.d apache2 enable played as expected for me Feb 9 '14 at 15:12
  • 1
    On Ubuntu Trusty it tells me "The disable|enable API is not stable and might change in the future."
    – Tanner
    Jun 10 '14 at 0:31
  • 1
    Doesn't work - error: no runlevel symlinks to modify, aborting!. However, apache2 is running and autostarts. Dec 14 '14 at 11:05
  • Doesn't work anymore: update-rc.d: error: no runlevel symlinks to modify, aborting!
    – TomDogg
    Apr 29 '15 at 9:33
211

On old,pre systemd distributions under /etc/init.d/ you will find all the init scripts for different boot up services, like apache2, networking, etc.

Depending on which runlevel the computer starts in, different services are started. So from the /etc/init.d/ folder each "service" is linked to one/many/no run level folders named from rc0.d to rc6.d.

To keep things simple there is a tool for removing/adding these links, hence removing or adding scripts to and from start up.

To disable apache2 simply type:

sudo update-rc.d apache2 disable

This disables apache2 at startup but is not removed so it can be enabled again. To remove the apache2 startup scripts do the following:

To remove apache2 simply type:

sudo update-rc.d -f  apache2 remove

###Doing this will cause all runlevel folders that are linked to apache2 to be removed.

7
  • 2
    chkconfig may also help - " chkconfig {service_name} off "
    – MCR
    Aug 1 '12 at 7:10
  • Doesn't work anymore: The script you are attempting to invoke has been converted to an Upstart job, but lsb-header is not supported for Upstart jobs. (...)
    – TomDogg
    Apr 29 '15 at 9:34
  • 2
    @TomDogg, can you specify the versions you were working with? This answer works for Apache 2 on Ubuntu 14.04.3 Nov 2 '15 at 20:20
  • 1
    How to restore the service? Apr 14 '16 at 8:12
  • 11
    Warning! This will REMOVE the service! Use sudo update-rc.d apache2 disable. Jan 17 '17 at 19:37
79

With systemd we can now use systemctl commands to prevent a service from automatically starting at boot.

here is an example:

sudo systemctl disable apache2

You will still be able to start and stop the service but it won't start up at boot.

9
  • 2
    Linux Mint is still based on Ubuntu 14.04. Ubuntu starts using systemd from 15.04 on.
    – twan163
    Dec 6 '15 at 23:01
  • 1
    @dragonmnl as twan163 said, systemd is for the newer versions (debian jessie or equivalent +)
    – mchid
    Dec 8 '15 at 21:55
  • 1
    this worked great on Debian
    – Anupam
    Jul 19 '17 at 12:37
  • 1
    the right answer for debian 9+
    – John
    Nov 24 '17 at 5:12
  • 1
    If encounter update-rc.d: error: no runlevel symlinks to modify, aborting!, recreate any below missing simlinks; then retry: /etc/rc0.d/K01<service> /etc/rc1.d/K01<service> /etc/rc2.d/S99<service> /etc/rc3.d/S99<service> /etc/rc4.d/S99<service> /etc/rc5.d/S99<service> /etc/rc6.d/K01<service> Aug 11 '18 at 2:26
6

Thought I'd just add to the answers by @gsullins and @tomodachi, for future readers who used the accepted answer.

If you've already used:

sudo update-rc.d apache2 remove

You can use the argument defaults to add apache2 back into the autostart

sudo update-rc.d apache2 defaults

Then you're able to enable/disable

sudo update-rc.d apache2 disable
sudo update-rc.d apache2 enable

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