The rc0.d,rc1.d,... directories in /etc
As others have noted, the answer is all about runlevels which are basically the modes of operation of an operating system. On Linux, these are usually:
ID Name Description
0 Halt Shuts down the system.
1 Single-user Mode Mode for administrative tasks.
2 Multi-user Mode Does not configure network interfaces and
does not export networks services.
3 Multi-user Mode with Networking Starts the system normally.
4 Not used/User-definable For special purposes.
5 Start the system normally with
with GUI As runlevel 3 + display manager.
6 Reboot Reboots the system.
So, each of the rcN
directories contains symbolic links to the scripts that should be run at that runlevel. All the actual scripts are normally in the /etc/init.d
directory:
$ ls -l /etc/rc5.d/S22cron
lrwxrwxrwx 1 root root 14 Jan 14 2013 /etc/rc5.d/S22cron -> ../init.d/cron
Symbolic link naming
A symbolic link whose name begins with an S
will be started at the runlevel in question while those whose name begins with K
will be killed. Notice that all the links in rc6.d
, the reboot runlevel, start with K
. That's because they should all be stopped for a reboot and nothing should be started.
The numbers after the initial letter refer to the running order of the linked scripts. Those with smaller numbers will be run before those with higher numbers. So, in your specific example, S23ntp
will be run (started in this case) before S24dovecot
.
- These are
runlevel
s and are a System V-style initiation used by most *NIX systems (with the notable exception ofsystemd
-based systems). When booting the kernel/user decides whatrunlevel
should it run and execute only thatrunlevel
. Meaning that depending therunlevel
you can boot up with a different set of programs. There are runlevels for halt and reboot too, but since you are focusing on the startup part, let's ignore them for now. - Since only one
runlevel
is executed at boot, some programs should/want to start/stop at differentrunlevel
s with different or same parameters in the same or different order (not all runlevels are the same in all OS's). But Ubuntu copy runlevels 3-5 from 2, that's why they are the same. - No.
runlevel
s are executed just once in startup or when you changerunlevel
. ntp
scripts should execute first thendovecot
in runlevel 2-5, not the case for runlevel 1. The ordinal number in the script names (S23ntp
) states the order of execution. So, it all depends of the runlevel you are using.- It depends of the Distro but in the particular case of Ubuntu you can add your script to runlevel 1 and 2.
More info in the Wikipedia article about Ubuntu runlevels
1) The multiple rcX.d directories specify what services to start or stop during the 'X' runlevel.
2) rc0.d is for runlevel 0 which is shutdown. rc6.d is for reboot. Rest all are for different runlevels (2 - 5). The S stands for start and K for Kill. These are essentially links to the original scripts in /etc/rc.d. The numbers after S/K are the priority by which the services will be started/Killed.
3) Yes if they are specified multiple times the start/kill script will be run multiple times. But no one wants to do that.
4) Looking at the priority numbers, ntp service will be started first followed by dovecot.
5) The 4th point's the way.