LPI Linux Certification/Change Runlevels And Shutdown Or Reboot System

101.3 Change runlevels / boot targets and shutdown or reboot system
(LPIC-1 Version 5.0)

Weight: 3

Description: Candidates should be able to manage the SysVinit runlevel or systemd boot target of the system. This objective includes changing to single user mode, shutdown or rebooting the system. Candidates should be able to alert users before switching runlevels / boot targets and properly terminate processes. This objective also includes setting the default SysVinit runlevel or systemd boot target. It also includes awareness of Upstart as an alternative to SysVinit or systemd.

Key knowledge area(s):
 * Set the default runlevel or boot target.
 * Change between runlevels / boot targets including single user mode.
 * Shutdown and reboot from the command line.
 * Alert users before switching runlevels / boot targets or other major system event.
 * Properly terminate processes.
 * Awareness of acpid.

The following is a partial list of the used files, terms and utilities:

Runlevels Overview
Runlevels are used in Linux to customize the way operating system is initialized. Runlevel defines which services are started automatically during initialization. Each runlevel has a number (and possibly alias) which defines it. Common runlevel number can be found in a table below, unfortunately some of the differ between RedHat and Debian based distributions:

Setting Default Runlevel
Default runlevel is controlled in /etc/inttab file in most of the distributions however this is currently changing as some new Linux distributions start using more advanced event driven upstart replacement for traditional init program. In /etc/inittab the following line controls default runlevel (example from Debian with runlevel 2 set as default): id:2:initdefault: When operating system loads /sbin/init program it will read the line above and determine that it should use runlevel 2 (unless another runlevel number was passed as kernel parameter). Following this init will run all scripts from /etc/rcX.d/ directory where X is runlevel number. Sample content of the directory might look similar to: -rw-r--r-- 1 root root 556 2008-08-12 15:09 README lrwxrwxrwx 1 root root 17 2010-01-07 22:08 S10rsyslog -> ../init.d/rsyslog lrwxrwxrwx 1 root root 15 2010-01-07 22:10 S12acpid -> ../init.d/acpid lrwxrwxrwx 1 root root 15 2010-05-09 11:39 S15bind9 -> ../init.d/bind9 lrwxrwxrwx 1 root root 13 2010-01-07 22:40 S16ssh -> ../init.d/ssh lrwxrwxrwx 1 root root 15 2010-01-07 22:15 S20exim4 -> ../init.d/exim4 lrwxrwxrwx 1 root root 20 2010-01-07 22:15 S20nfs-common -> ../init.d/nfs-common lrwxrwxrwx 1 root root 27 2010-01-07 23:10 S20nfs-kernel-server -> ../init.d/nfs-kernel-server lrwxrwxrwx 1 root root 23 2010-01-07 22:15 S20openbsd-inetd -> ../init.d/openbsd-inetd lrwxrwxrwx 1 root root 13 2010-01-07 22:15 S89atd -> ../init.d/atd lrwxrwxrwx 1 root root 14 2010-01-07 22:08 S89cron -> ../init.d/cron lrwxrwxrwx 1 root root 17 2010-01-07 22:59 S91apache2 -> ../init.d/apache2 lrwxrwxrwx 1 root root 18 2010-01-07 22:08 S99rc.local -> ../init.d/rc.local lrwxrwxrwx 1 root root 19 2010-01-07 22:08 S99rmnologin -> ../init.d/rmnologin lrwxrwxrwx 1 root root 23 2010-01-07 22:08 S99stop-bootlogd -> ../init.d/stop-bootlogd

All services from the directory will be run in order starting from the lowest number to the highest. As you might have notices all file in the /etc/rcX.d/ directory are symbolic links to startup scripts in /etc/init.d/. When operating system enters the runlevel init program passes "start" parameter to all scripts prefixed with "S" character and "stop" to all scripts prefixed with "K". In above example one of the first programs to run is rsyslog: S10rsyslog -> ../init.d/rsyslog This will cause init to execute the following command: /etc/init.d/rsyslog start

Above example is runlevel 2 from Debian which is full multiuser so no services have to be killed however if we look at runlevel 1 on the same system it looks very differently: lrwxrwxrwx 1 root root 17 2010-01-07 22:59 K09apache2 -> ../init.d/apache2 lrwxrwxrwx 1 root root 13 2010-01-07 22:15 K11atd -> ../init.d/atd lrwxrwxrwx 1 root root 14 2010-01-07 22:08 K11cron -> ../init.d/cron lrwxrwxrwx 1 root root 15 2010-01-07 22:15 K20exim4 -> ../init.d/exim4 lrwxrwxrwx 1 root root 20 2010-01-07 22:15 K20nfs-common -> ../init.d/nfs-common lrwxrwxrwx 1 root root 23 2010-01-07 22:15 K20openbsd-inetd -> ../init.d/openbsd-inetd lrwxrwxrwx 1 root root 27 2010-01-07 23:10 K80nfs-kernel-server -> ../init.d/nfs-kernel-server lrwxrwxrwx 1 root root 17 2010-01-07 22:15 K81portmap -> ../init.d/portmap lrwxrwxrwx 1 root root 13 2010-01-07 22:40 K84ssh -> ../init.d/ssh lrwxrwxrwx 1 root root 15 2010-05-09 11:39 K85bind9 -> ../init.d/bind9 lrwxrwxrwx 1 root root 15 2010-01-07 22:10 K88acpid -> ../init.d/acpid lrwxrwxrwx 1 root root 17 2010-01-07 22:08 K90rsyslog -> ../init.d/rsyslog -rw-r--r-- 1 root root 369 2007-12-23 11:04 README lrwxrwxrwx 1 root root 19 2010-01-07 22:08 S30killprocs -> ../init.d/killprocs lrwxrwxrwx 1 root root 16 2010-01-07 22:08 S90single -> ../init.d/single

When system enters runlevel 1 it will kill all services beginning with "K" leaving bare minimum running.

Changing Runlevels, shutting down and rebooting system
init and telinit - telinit command is just a link to init, functionality of both is the same. They can be used to change the current runlevel. They take only one parameter, which is the new runlevel number. Example usage: Change runlevel single user mode: init 1 Runlevel 6 is reboot. init can be used to reboot the system: telinit 6 To shutdown we go to runlevel 0 init 0

shutdown - shutdown command can be used to reboot, shutdown and send a warning message to all logged in users. /sbin/shutdown [-t sec] [-arkhncfFHP] time [warning-message] Common options:
 * -h - halt or power off after shutdown
 * -r - reboot after shutdown
 * -k - Don't really shutdown; only send the warning message to everybody

Examples: Shutdown in 5 minutes and send warning message shutdown -h +5 System is going down for maintenance Reboot immediately shutdown -r now Do not reboot or shutdown, only send message to users shutdown -k Make sure you keep your password safe Shutdown system at 23:59 shutdown -h 23:59 This system is going down for maintenance at 23:59