trusty (7) runlevel.7.gz

Provided by: upstart_1.12.1-0ubuntu4.2_amd64 bug

NAME

       runlevel - event signalling change of system runlevel

SYNOPSIS

       runlevel RUNLEVEL=RUNLEVEL PREVLEVEL=PREVLEVEL [ENV]...

DESCRIPTION

       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
       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  <http://www.debian.org/doc/debian-
       policy/ch-opersys.html#s-sysvinit>

       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.

EXAMPLE

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

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

SEE ALSO

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