Permanently Disable Init Service

I just provisioned a new VPS running CentOS 6, and it comes with Apache.

I want to disable Apache, because I will be using Nginx instead.

I know I can just delete the script in /etc/init.d/, but I don't want to do that, because it's a stock thing that came with the system. I would rather have a graceful way of disabling the service.

I thought that I would be able to put something in /etc/inittab, but inittab contains:

# inittab is only used by upstart for the default runlevel.
#
# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# System initialization is started by /etc/init/rcS.conf
#
# Individual runlevels are started by /etc/init/rc.conf
#
# Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf
#
# Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf,
# with configuration in /etc/sysconfig/init.
#
# For information on how to write upstart event handlers, or how
# upstart works, see init(5), init(8), and initctl(8).
#
# Default runlevel. The runlevels used are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
# 
id:3:initdefault:

This leads me to believe that the system is running upstart. Well, I looked, and the correct way to disable a service in upstart is to add an override file. So I run:

% 'manual' > /etc/init/httpd.override

And reboot my server. But httpd is still running! Confused by this, I decide to check that upstart is the init service, by running

% readlink /proc/1/exe
/sbin/init

Well that's not what I was expecting to see. Maybe I'm not running upstart after all. Is there a definite way to check? And if I am running init, what is the recommended way to disable a service permanently? I am new to all this, and there seem to be many conflicting opinions out there.

Thank you all for your help.


The way you disable a service under just about any RedHat-derived distribution is with the chkconfig command:

# chkconfig httpd off

And to stop a running service:

# service httpd stop

These commands will Do the Right Thing regardless of whether your system is running systemd, upstart, or vanilla SysVInit.

For what it's worth, despite running upstart most services in CentOS 6 actually use legacy init.d scripts, located in /etc/rc.d/rc<RUNLEVEL>.d. For these services, chkconfig manages the symlinks in /etc/rc.d/init.d.


Disable the service you dont want to start during system boot using chkconfig.

List available services with their states

chkconfig --list

Disable service htttpd in runlevel 2345

chkconfig --level 2345 httpd off