Installing and removing services using rc.d

When installing stuff on your *nix box, you may want to have them automatically run upon startup, somewhat like a service. For that, you have the rc.d system that works with init based on your runlevel, and the Upstart system.

There are other places you can go to to learn about administering services with rc.d, or writing rc.d scripts. This post is just meant to be a basic overview/HOWTO on this topic.

A basic way to understand the init/rc.d system is that the /etc/init.d/ scripts do the managing of the “services” that you want, and the rc.d scripts run the relevant init.d scripts based on the runlevel you’re booting into.

$ runlevel
N 2

The output of the runlevel command will let you know which runlevel you are in (2 in this case). For that, we assume that the rc2.d scripts are run.

$ ls -l /etc/rc2.d/
total 4
lrwxrwxrwx 1 root root  13 2010-09-27 09:21 K50ntp -> ../init.d/ntp
-rw-r--r-- 1 root root 677 2011-04-19 15:11 README
lrwxrwxrwx 1 root root  26 2010-05-10 16:07 S20clamav-freshclam -> ../init.d/clamav-freshclam

Here’s an excerpt of the listing of the files in /etc/rc2.d/. You will see that there are links named starting with K, and others starting with S. The K ones are simply disabled (they don’t run when you enter that runlevel), and the S ones are enabled.

So…we assume that the relevant /etc/init.d/ script has been written/installed already, and here’s how you remove all links for a given service (pppd-dns in these examples).

$ sudo update-rc.d -f pppd-dns remove

 Removing any system startup links for /etc/init.d/pppd-dns ...

Showing that the pppd-dns service attempts to install itself into runlevels 1, 2, 3, 4 and 5 where possible.

$ head /etc/init.d/pppd-dns

#!/bin/sh -e
# Provides:          pppd-dns
# Required-Start:    $local_fs gdm
# Required-Stop:
# Default-Start:     1 2 3 4 5
# Default-Stop:
# Short-Description: Restore resolv.conf if the system crashed.

And…here’s how you install the service based on the configured settings in the /etc/init.d/pppd-dns file:

$ sudo update-rc.d pppd-dns defaults

update-rc.d: warning: pppd-dns start runlevel arguments (2 3 4 5) do not match LSB Default-Start values (1 2 3 4 5)
update-rc.d: warning: pppd-dns stop runlevel arguments (0 1 6) do not match LSB Default-Stop values (none)
 Adding system startup for /etc/init.d/pppd-dns ...
   /etc/rc0.d/K20pppd-dns -> ../init.d/pppd-dns
   /etc/rc1.d/K20pppd-dns -> ../init.d/pppd-dns
   /etc/rc2.d/S20pppd-dns -> ../init.d/pppd-dns
   /etc/rc3.d/S20pppd-dns -> ../init.d/pppd-dns
   /etc/rc4.d/S20pppd-dns -> ../init.d/pppd-dns
   /etc/rc5.d/S20pppd-dns -> ../init.d/pppd-dns
   /etc/rc6.d/K20pppd-dns -> ../init.d/pppd-dns


One thought on “Installing and removing services using rc.d”

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s