telinit(8) System Manager's Manual telinit(8)NAME
telinit - change system runlevel
SYNOPSIS
telinit [OPTION]... RUNLEVEL
DESCRIPTION
telinit may be used to change the system runlevel.
The RUNLEVEL argument should be one of the multi-user runlevels 2-5, 0 to halt the system, 6 to reboot the system or 1 to bring the system
down into single-user mode.
Normally you would use the shutdown(8) tool to halt or reboot the system, or to bring it down to single-user mode.
RUNLEVEL may also be S or s which will place the system directly into single-user mode without actually stopping processes first, you prob-
ably won't want that.
The runlevel is changed by emitting the runlevel(7) event, which includes the new runlevel in the RUNLEVEL environment variable as well as
the previous runlevel (obtained from the environment or from /var/run/utmp) in the PREVLEVEL variable.
telinit will write the new runlevel to /var/run/utmp and append a new entry to /var/log/wtmp.
Other commands
telinit may be also used to send basic commands to the init(8) daemon for compatibility with System V. These are:
Q or q to request that init(8) reload its configuration. This is rarely necessary since Upstart watches its configuration with inotify(7)
and is deprecated by the initctl(8) reload-configuration command.
U or u to request that the init(8) daemon re-execute itself. This is not recommended since Upstart is currently unable to preserve its
state, but is necessary when upgrading system libraries.
OPTIONS -e KEY=VALUE
This specifies an additional environment variable to be included in the event along with RUNLEVEL and PREVLEVEL.
ENVIRONMENT
RUNLEVEL
telinit will read the current runlevel from this environment variable if set in preference to reading from /var/run/utmp
FILES
/var/run/utmp
Where the current runlevel will be read from; this file will also be updated with the new runlevel.
/var/log/wtmp
A new runlevel record will be appended to this file for the new runlevel.
NOTES
The Upstart init(8) daemon does not keep track of runlevels itself, instead they are implemented entirely by its userspace tools.
See runlevel(7) for more details.
AUTHOR
Written by Scott James Remnant <scott@netsplit.com>
REPORTING BUGS
Report bugs at <https://launchpad.net/upstart/+bugs>
COPYRIGHT
Copyright (C) 2009 Canonical Ltd.
This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICU-
LAR PURPOSE.
SEE ALSO runlevel(7)init(8)initctl(8)shutdown(8)runlevel(8)Upstart 2009-07-09 telinit(8)
Check Out this Related Man Page
runlevel(7) Miscellaneous Information Manual runlevel(7)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(R) 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 Man-
ual. 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 sys-
tem 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 cur-
rent 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)Upstart 2009-07-09 runlevel(7)