More on Init


Here we will look more closely at the init process after the Linux kernel has been loaded, and just began to start.

1. /sbin/init

The very first program the Linux kernel starts is the init script located at /sbin/init. This script reads in configurations from /etc/inittab which tells it what scripts to run.

init is the root process with PID=1

init then calls the script /etc/rc.d/rc.sysinit. (rc stands for run control)

2. /etc/rc.d/rc.sysinit

The rc.sysinit script does several initialization steps to the system, such as setting the clock, setting the host name, initializing controllers etc. To see the entire list of items, click here

The next script init runs is /etc/rc.d/rc

3. /etc/rc.d/rc

The /etc/rc.d/rc script initiates the running of all startup scripts

A number known as the run level is passed to this script, which is given as such

  • 0 = halt
  • 1 = single-user mode
  • 6 = reboot

Runlevels 2-5 are used for various forms of multi-user mode

The initial run level is specified in /etc/inittab.

/etc/rc.d/rc uses the run level to enter the appropriate /etc/rc.d/rc<runlevel>.d/ directory and calls the scripts inside

4. /etc/rc.d/rc<runlevel>.d/

Inside the /etc/rc.d/rc<runlevel>.d/ directory contains a number of scripts. These scripts start with either an S or a K

An example is:

lrwxrwxrwx   1 root     root           19 Aug 16 06:15 K34yppasswdd -> ../init.d/yppasswdd
lrwxrwxrwx   1 root     root           18 Aug 16 06:15 K45arpwatch -> ../init.d/arpwatch
lrwxrwxrwx   1 root     root           15 Aug 16 06:15 K50snmpd -> ../init.d/snmpd
lrwxrwxrwx   1 root     root           16 Aug 16 06:15 K55routed -> ../init.d/routed
lrwxrwxrwx   1 root     root           14 Aug 16 06:15 K80nscd -> ../init.d/nscd
lrwxrwxrwx   1 root     root           16 Aug 16 06:15 K88ypserv -> ../init.d/ypserv
lrwxrwxrwx   1 root     root           14 Aug 16 06:15 S05apmd -> ../init.d/apmd
lrwxrwxrwx   1 root     root           17 Aug 16 06:15 S10network -> ../init.d/network
lrwxrwxrwx   1 root     root           17 Aug 16 06:15 S11portmap -> ../init.d/portmap
lrwxrwxrwx   1 root     root           15 Aug 16 06:15 S15netfs -> ../init.d/netfs
lrwxrwxrwx   1 root     root           16 Aug 16 06:15 S20random -> ../init.d/random
lrwxrwxrwx   1 root     root           16 Aug 16 06:15 S30syslog -> ../init.d/syslog

Names that start with K means to kill the process, while names that start with S means to start the process.

The following two digit number defines the priority. S20 will run before S30

When the system first boots, it executes all the Kill scripts K* first, before executing all the Start scripts S*.

When the run level is switched, say for example from 3 to 1, then all the scripts in /etc/rc.d/rc1.d/ are executed (Kill scripts first, before Start scripts)

These scripts here are symbolic links that points to scripts located in /etc/rc.d/init.d/

5. /etc/rc.local

The script /etc/rc.local is executed after all the normal system services are started.

It can be used to start a custom service, for example a server that's installed in /usr/local

results matching ""

    No results matching ""