update-rc.d - install and remove System-V style init script links
update-rc.d [-n] [-f] name remove
update-rc.d [-n] name defaults [NN | SS KK]
update-rc.d [-n] name start|stop NN runlevel [runlevel]... . start|stop NN runlevel [runlevel]... . ...
update-rc.d
updates the System V style init script links /etc/rcrunlevel.d/NNname
whose target is the script /etc/init.d/name. These links are run by init
when it changes runlevels; they are generally used to start and stop
system services such as daemons. runlevel is one of the runlevels
supported by init, namely, 0123456789S, and NN is the two-digit sequence
number that determines where in the sequence init will run the scripts.
This
manpage documents only the usage and behaviour of update-rc.d. For a
discussion of the System V style init script arrangements please see
init(8) and the Debian Policy Manual.
Please note that
this program was designed for use in package maintainer scripts and,
accordingly, has only the very limited functionality required by such
scripts. System administrators are not encouraged to use update-rc.d to
manage runlevels. They should edit the links directly or use runlevel
editors such as sysv-rc-conf and bum instead.
INSTALLING INIT SCRIPT LINKS
When
run with either the defaults, start, or stop options, update-rc.d makes
links /etc/rcrunlevel.d/[SK]NNname that point to the script
/etc/init.d/name.
If any files
/etc/rcrunlevel.d/[SK]??name already exist then update-rc.d does
nothing. The program was written this way so that it will never change
an existing configuration, which may have been customized by the system
administrator. The program will only install links if none are present,
i.e., if it appears that the service has never been installed before.
A
common system administration error is to delete the links with the
thought that this will "disable" the service, i.e., that this will
prevent the service from being started. However, if all links have been
deleted then the next time the package is upgraded, the package's
postinst script will run update-rc.d again and this will reinstall links
at their factory default locations. The correct way to disable services
is to configure the service as stopped in all runlevels in which it is
started by default. In the System V init system this means renaming the
service's symbolic links from S to K.
If defaults is
used then update-rc.d will make links to start the service in runlevels
2345 and to stop the service in runlevels 016 unless an LSB-style header
is present in the init.d script and the /etc/update-rc.d-lsbparse file
exist. If such header exist, the levels listed in the Default-Start and
Default-Stop fields in that header are used instead. By default all the
links will have sequence number 20, but this should be overridden if
there are dependencies. For example if daemon B depends on A, then A
must be started before B and B must be killed before A. You accomplish
this by supplying two NN arguments. In general, core daemons should
start early and be killed late, whilst applications can start late and
be killed early. See EXAMPLES below.
The first NN
argument supplies the start sequence number and the second NN argument
supplies the kill sequence number. Kill scripts are called first,
passing a stop argument. Then start scripts are called passing a start
argument. In either case, calls happen in ascending sequence number
order.
Supplying a single NN argument will use the same
number for both start and kill links. This is supported for backward
compatibility but is discouraged, as it may lead to inconsistent
settings. As a rule of thumb, if you increase the start sequence number
you should also decrease the stop sequence number, and vice-versa.
As
a rule of thumb, the sequence number of the stop link should be 100
minus the sequence number of the start link; this causes services to be
stopped in the opposite order to that in which they are started.
Obviously, therefore, the default stop sequence number should be 80.
Defaulting to 20, as update-rc.d does, is an old bug that cannot be
fixed because of the risk of breaking things.
Instead
of defaults one can give one or more sets of arguments specifying
particular runlevels in which to start or stop the service. Each of
these sets of arguments starts with the keyword start or stop and a
sequence number NN, followed by one or more runlevel numbers. The set is
terminated by a solitary full stop character. When explicit
specification, rather than defaults, is used there will usually be one
start and one stop set. If different sequence codes are required in
different runlevels then several start sets or several stop sets may be
specified. If this is done and the same runlevel is named in multiple
sets then only the last one counts. Therefore it is not possible to
create multiple start or multiple stop links for a service in a single
runlevel directory.
The script /etc/init.d/name must exist before update-rc.d is run to create the links.
When
invoked with the remove option, update-rc.d removes any links in the
/etc/rcrunlevel.d directories to the script /etc/init.d/name. The script
must have been deleted already. If the script is still present then
update-rc.d aborts with an error message.
update-rc.d
is usually called from a package's post-removal script when that script
is given the purge argument. Any files in the /etc/rcrunlevel.d
directories that are not symbolic links to the script /etc/init.d/name
will be left untouched.
Don't do anything, just show what we would do.
Force removal of symlinks even if /etc/init.d/name still exists.
Insert links using the defaults:
update-rc.d foobar defaults
Equivalent command using explicit argument sets:
update-rc.d foobar start 20 2 3 4 5 . stop 20 0 1 6 .
More typical command using explicit argument sets:
update-rc.d foobar start 30 2 3 4 5 . stop 70 0 1 6 .
Insert links at default runlevels when B requires A
update-rc.d script_for_A defaults 80 20
update-rc.d script_for_B defaults 90 10
Insert a link to a service that (presumably) will not be needed by any other daemon
update-rc.d top_level_app defaults 98 02
Insert links for a script that requires services that start/stop at sequence number 20
update-rc.d script_depends_on_svc20 defaults 21 19
Remove all links for a script (assuming foobar has been deleted already):
update-rc.d foobar remove
Example of disabling a service:
update-rc.d -f foobar remove
update-rc.d foobar stop 20 2 3 4 5 .
Example of a command for installing a system initialization-and-shut-down script:
update-rc.d foobar start 45 S . stop 31 0 6 .
Example of a command for disabling a system initialization-and-shutdown
update-rc.d -f foobar remove
update-rc.d foobar stop 45 S .
See http://bugs.debian.org/sysv-rc.
The directory containing the actual init scripts.
The directories containing the links used by init and managed by update-rc.d.
Model for use by writers of init.d scripts.
Debian Policy Manual, /etc/init.d/skeleton, sysv-rc-conf(8), bum(8), init(8)