Man Linux: Main Page and Category List


       runlevel - event signalling change of system runlevel




       This  page  describes  the  runlevel  Upstart  event,  and  the general
       implementation of runlevels in the Upstart system.   For  the  runlevel
       tool, see runlevel(8)

   The runlevel event
       The runlevel event signals a change of system runlevel.  The new system
       runlevel is given in the RUNLEVEL argument,  and  the  previous  system
       runlevel in the PREVLEVEL argument (which may be empty).

       Additional  environment may follow these depending on the runlevel, and
       the tool that emitted the event.  The shutdown(8) tool will  supply  an
       INIT_HALT  variable  set to either HALT or POWEROFF when called with -H
       or -P respectively.

       Runlevels are a concept from UNIX(R)  System  V  used  by  the  init(8)
       daemon  or other system initialisation system to define modes of system

       Eight runlevels are permitted, the first seven are numbered 0-6 and the
       eighth is named S or s (both are permitted).

       Services  and  other system components are said to exist in one or more
       runlevels.  When switching from one runlevel to another,  the  services
       that  should not exist in the new runlevel are stopped and the services
       that only exist in the new runlevel are started.

       This is performed by the /etc/init.d/rc script executed on a change  of
       runlevel  (by  jobs  run  on the runlevel event in the Upstart system).
       This script examines symlinks in the /etc/rc?.d  directories,  symlinks
       beginning  K  are  services  to be stopped and symlinks beginning S are
       services to be started.

       The authorative documentation for this process  can  be  found  in  the
       System  run  levels  and  init.d  scripts  section of the Debian Policy
       Manual.      This      may      be       currently       found       at

       Runlevels  0,  1  and  6  are reserved.  Runlevel 0 is used to halt the
       system and 6 to reboot the system.  Runlevel 1 is  used  to  bring  the
       system  back  down into single-user mode, after which the runlevel will
       be S.

   System V initialisation in Upstart
       The compatible implementation of runlevels permits Upstart jobs  to  be
       run  on  the  runlevel event that perform the same functionality as the
       original System V init(8) daemon.

       The /etc/init/rc.conf job is run on the runlevel event, thus  receiving
       the  RUNLEVEL  and PREVLEVEL environment variables.  Its sole job is to
       execute the /etc/init.d/rc script,  passing  the  new  runlevel  as  an

       Initial  system  startup  is  provided by the /etc/init/rc-sysinit.conf
       job.  This is run on the startup(7) event, and is primarily responsible
       for  running  the /etc/init.d/rc script with the special S argument and
       calling telinit(8) to switch into the default runlevel when done.  This
       also  handles  the  -b,  emergency,  -s  and single kernel command-line
       options as well as specifying  an  alternate  runlevel  on  the  kernel

       Finally the /etc/init/rcS.conf job handles the special case of entering
       the single-user runlevel and providing a login shell.  Once that  shell
       terminates,  this  restarts  the rc-sysinit job to re-enter the default

   Implementation of runlevels in Upstart
       The Upstart init(8) daemon has no  native  concepts  of  runlevel,  and
       unlike  the  System  V  daemon,  makes  no attempt to keep track of the
       current runlevel.

       Instead a compatible implementation is  provided  by  the  runlevel(8),
       telinit(8) and shutdown(8) tools supplied with Upstart.

       The  telinit(8) and shutdown(8) tools are used by system administrators
       to change the runlevel, thus they both  generate  this  runlevel  event
       obtaining  the  value for the PREVLEVEL environment variable from their
       own environment (the RUNLEVEL variable) or the /var/run/utmp file.

       Additionally they update the /var/run/utmp file with the new  runlevel,
       and append a log entry to the /var/log/wtmp file.

       The runlevel(8) tool may be used by system administrators to obtain the
       current runlevel, this reads the RUNLEVEL and PREVLEVEL variables  from
       its  own  environment  or  reads the current and previous runlevel from

       The who(1) -r command may also be used to  read  the  current  runlevel
       from /var/run/utmp.

       This provides full compatibility with System V.

       During  the  boot  scripts, where the /var/run/utmp file may not yet be
       writable, the RUNLEVEL and  PREVLEVEL  environment  variables  will  be
       available so telinit(8) will still provide the correct values.

       Once  the  boot  scripts have finished, while the environment variables
       may no longer be available, the /var/run/utmp file will be and the most
       recent telinit(8) invocation should have successfully written to it.

   Boot time records
       The  telinit(8) tool also takes care of writing the boot time record to
       both /var/run/utmp and /var/log/wtmp.

       This is written if the previous runlevel in these files does not  match
       the  previous  runlevel obtained from its environment.  In general this
       occurs when switching from runlevel S to the default runlevel, at which
       point  the /var/run/utmp and /var/log/wtmp files are both writable, and
       the telinit(8) invocation to  do  the  switch  has  RUNLEVEL=S  in  its


       A service running in the typical multi-user runlevels might use:

              start on runlevel [2345]
              stop on runlevel [!2345]


       runlevel(8) init(8) telinit(8) shutdown(8) who(1)