Provided by: upstart-sysv_1.13.2-0ubuntu21.1_amd64 bug


       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® System V used by the init(8)  daemon  or  other  system
       initialisation system to define modes of system operation.

       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 authoritative 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 argument.

       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 command-line.

       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 runlevel.

   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 /var/run/utmp.

       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 environment.


       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)