aboutsummaryrefslogtreecommitdiffstats
path: root/doc/sysvinitfiles
diff options
context:
space:
mode:
Diffstat (limited to 'doc/sysvinitfiles')
-rw-r--r--doc/sysvinitfiles212
1 files changed, 212 insertions, 0 deletions
diff --git a/doc/sysvinitfiles b/doc/sysvinitfiles
new file mode 100644
index 00000000..fcc90b5e
--- /dev/null
+++ b/doc/sysvinitfiles
@@ -0,0 +1,212 @@
+Writing System V init scripts for Red Hat Linux
+===============================================
+
+All System V init scripts are named /etc/rc.d/init.d/<servicename>
+where <servicename> is the name of the service. There must be no
+".init" suffix.
+
+This path will very likely be moved to /etc/init.d in the future.
+Once Red Hat Linux 7.0 is installed, you can access scripts as
+/etc/init.d/<servicename>, via symlinks.
+
+Sample Script
+=============
+
+#!/bin/bash
+#
+# /etc/rc.d/init.d/<servicename>
+#
+# <description of the *service*>
+# <any general comments about this init script>
+#
+# <tags -- see below for tag definitions. *Every line* from the top
+# of the file to the end of the tags section must begin with a #
+# character. After the tags section, there should be a blank line.
+# This keeps normal comments in the rest of the file from being
+# mistaken for tags, should they happen to fit the pattern.>
+
+# Source function library.
+. /etc/init.d/functions
+
+<define any local shell functions used by the code that follows>
+
+start() {
+ echo -n "Starting <servicename>: "
+ <start daemons, perhaps with the daemon function>
+ touch /var/lock/subsys/<servicename>
+ return <return code of starting daemon>
+}
+
+stop() {
+ echo -n "Shutting down <servicename>: "
+ <stop daemons, perhaps with the killproc function>
+ rm -f /var/lock/subsys/<servicename>
+ return <return code of stopping daemon>
+}
+
+case "$1" in
+ start)
+ start
+ ;;
+ stop)
+ stop
+ ;;
+ status)
+ <report the status of the daemons in free-form format,
+ perhaps with the status function>
+ ;;
+ restart)
+ stop
+ start
+ ;;
+ reload)
+ <cause the service configuration to be reread, either with
+ kill -HUP or by restarting the daemons, in a manner similar
+ to restart above>
+ ;;
+ condrestart)
+ <Restarts the servce if it is already running. For example:>
+ [ -f /var/lock/subsys/<service> ] && restart || :
+ probe)
+ <optional. If it exists, then it should determine whether
+ or not the service needs to be restarted or reloaded (or
+ whatever) in order to activate any changes in the configuration
+ scripts. It should print out a list of commands to give to
+ $0; see the description under the probe tag below.>
+ ;;
+ *)
+ echo "Usage: <servicename> {start|stop|status|reload|restart[|probe]"
+ exit 1
+ ;;
+esac
+exit $?
+
+Notes:
+
+- The restart and reload functions may be (and commonly are)
+ combined into one test, vis:
+ restart|reload)
+- You are not prohibited from adding other commands; list all commands
+ which you intend to be used interactively to the usage message.
+- Notice the change in that stop() and start() are now shell functions.
+ This means that restart can be implemented as
+ stop
+ start
+ instead of
+ $0 stop
+ $0 start
+ This saves a few shell invocations.
+
+Functions in /etc/init.d/functions
+=======================================
+
+daemon [ --check <name> ] [ --user <username>]
+ [+/-nicelevel] program [arguments] [&]
+
+ Starts a daemon, if it is not already running. Does
+ other useful things like keeping the daemon from dumping
+ core if it terminates unexpectedly.
+
+ --check <name>:
+ Check that <name> is running, as opposed to simply the
+ first argument passed to daemon().
+ --user <username>:
+ Run command as user <username>
+
+killproc program [signal]
+
+ Sends a signal to the program; by default it sends a SIGTERM,
+ and if the process doesn't die, it sends a SIGKILL a few
+ seconds later.
+
+ It also tries to remove the pidfile, if it finds one.
+
+pidofproc program
+
+ Tries to find the pid of a program; checking likely pidfiles,
+ and using the pidof program. Used mainly from within other
+ functions in this file, but also available to scripts.
+
+status program
+
+ Prints status information. Assumes that the program name is
+ the same as the servicename.
+
+
+Tags
+====
+
+# chkconfig: <startlevellist> <startpriority> <endpriority>
+
+ Required. <startlevellist> is a list of levels in which
+ the service should be started by default. <startpriority>
+ and <endpriority> are priority numbers. For example:
+ # chkconfig: 2345 20 80
+ Read 'man chkconfig' for more information.
+
+ Unless there is a VERY GOOD, EXPLICIT reason to the
+ contrary, the <endpriority> should be equal to
+ 100 - <startpriority>
+
+# description: <multi-line description of service>
+
+ Required. Several lines of description, continued with '\'
+ characters. The initial comment and following whitespace
+ on the following lines is ignored.
+
+# description[ln]: <multi-line description of service in the language \
+# ln, whatever that is>
+
+ Optional. Should be the description translated into the
+ specified language.
+
+# processname:
+
+ Optional, multiple entries allowed. For each process name
+ started by the script, there should be a processname entry.
+ For example, the samba service starts two daemons:
+ # processname: smdb
+ # processname: nmdb
+
+# config:
+
+ Optional, multiple entries allowed. For each static config
+ file used by the daemon, use a single entry. For example:
+ # config: /etc/httpd/conf/httpd.conf
+ # config: /etc/httpd/conf/srm.conf
+
+ Optionally, if the server will automatically reload the config
+ file if it is changed, you can append the word "autoreload" to
+ the line:
+ # config: /etc/foobar.conf autoreload
+
+# pidfile:
+
+ Optional, multiple entries allowed. Use just like the config
+ entry, except that it points at pidfiles. It is assumed that
+ the pidfiles are only updated at process creation time, and
+ not later. The first line of this file should be the ASCII
+ representation of the PID; a terminating newline is optional.
+ Any lines other than the first line are not examined.
+
+# probe: true
+
+ Optional, used IN PLACE of processname, config, and pidfile.
+ If it exists, then a proper reload-if-necessary cycle may be
+ achieved by running these commands:
+
+ command=$(/etc/rc.d/init.d/SCRIPT probe)
+ [ -n "$command" ] && /etc/rc.d/init.d/SCRIPT $command
+
+ where SCRIPT is the name of the service's sysv init script.
+
+ Scripts that need to do complex processing could, as an
+ example, return "run /var/tmp/<servicename.probe.$$"
+ and implement a "run" command which would execute the
+ named script and then remove it.
+
+ Note that the probe command should simply "exit 0" if nothing
+ needs to be done to bring the service into sync with its
+ configuration files.
+
+Copyright (c) 2000 Red Hat Software, Inc.