NAME
update-rc.d - install and remove System-V style init script links
SYNOPSIS
update-rc.d [-n] [-f] B name remove
update-rc.d [-n] B name defaults [NN | SS KK]
update-rc.d [-n] name start|stop R NN runlevel [ runlevel ]... .
start|stop R NN runlevel [ runlevel ]... . ...
update-rc.d [-n] B name disable|enable [ S|2|3|4|5 ]
DESCRIPTION
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 R Debian Policy Manual .
INSTALLING INIT SCRIPT LINKS
update-rc.d has two modes of operation for installing scripts into the
boot sequence. A legacy mode where command line arguments are used to
decide the sequence and runlevel configuration, and the default mode
where dependency and runlevel information in the init.d script LSB
comment header is used instead. Such header is required to be present
in init.d scripts. See the insserv(8) manual page for details about
the LSB header format. The boot sequencing method is decided during
installation or upgrades. During upgrades, if there are no loops in
the dependencies declared by LSB headers of all installed init.d
scripts and no obsolete init.d scripts, the boot system is converted to
dependency based boot sequencing. The conversion to dependency based
boot sequencing is one-way. The machines using the legacy mode will
have a file /etc/init.d/.legacy-bootordering .
Packages installing init.d scripts should make sure both methods work,
for compatiblity with systems where the migration have not been done
yet.
For legacy mode, the following section documents the old behaviour.
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. 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 R 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.
REMOVING SCRIPTS
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.
DISABLING INIT SCRIPT START LINKS
When run with the disable [ S|2|3|4|5 ] options, update-rc.d modifies
existing runlevel links for the script /etc/init.d/name by renaming
start links to stop links with a sequence number equal to the
difference of 100 minus the original sequence number.
When run with the enable [ S|2|3|4|5 ] options, update-rc.d modifies
existing runlevel links for the script /etc/init.d/name by renaming
stop links to start links with a sequence number equal to the positive
difference of current sequence number minus 100, thus returning to the
original sequence number that the script had been installed with before
disabling it.
Both of these options only operate on start runlevel links of S, 2, 3,
4 or 5. If no start runlevel is specified after the disable or enable
keywords, the script will attempt to modify links in all start
runlevels.
OPTIONS
-n Don’t do anything, just show what we would do.
-f Force removal of symlinks even if /etc/init.d/name still exists.
EXAMPLES
Insert links using the defaults:
update-rc.d foobar defaults
The equivalent dependency header would have start and stop
dependencies on $remote_fs and $syslog, and start in
runlevels 2-5 and stop in runlevels 0, 1 and 6.
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-shutdown script:
update-rc.d foobar start 45 S . stop 31 0 6 .
Example of a command for disabling a system initialization-and-shutdown
script:
update-rc.d -f foobar remove
update-rc.d foobar stop 45 S .
BUGS
See http://bugs.debian.org/sysv-rc.
FILES
/etc/init.d/
The directory containing the actual init scripts.
/etc/rc?.d/
The directories containing the links used by init and managed by
update-rc.d.
/etc/init.d/skeleton
Model for use by writers of init.d scripts.
/var/lib/sysv-rc/legacy-bootsequence
Flag indicating the machine is using legacy mode for boot script
ordering.
SEE ALSO
R Debian Policy Manual ,
/etc/init.d/skeleton,
insserv(8), sysv-rc-conf(8), bum(8), init(8).