1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233
|
#!/bin/sh
#
# /etc/init.d/FOO
#
# Template and example of a LSB conform init script for the service FOO
# See http://www.linuxbase.org/spec/ for details
#
### BEGIN INIT INFO
# Provides: FOO
# Required-Start: $syslog $remote_fs
# Should-Start: $time $portmap
# Required-Stop: $syslog $remote_fs
# Should-Stop: $time $portmap
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Short-Description: FOO daemon used for ABC
# Description: The FOO service is used for ZZZ
# The (long) description can spread multiple lines
# which start with '#<TAB>' or # followed by at least
# two spaces.
# X-UnitedLinux-Default-Enabled: yes
### END INIT INFO
#
# Remarks:
# - The LSB actually might be interpreted that there is only a single space
# between the the colon after the keyword and the first argument, but
# most or all LSB install_initd's support more than one space
# - Local extensions start with a X-[LANA registered provider or domain]-
# The X-UnitedLinux-Default-Enabled is one of the few actually used
# extension (enable service by when installing package, but keep current
# status when updating).
#
# The other keywords are described by the LSB. Notes on the differences
# between Required-Start and Should-Start (which was introduced by LSB 1.9):
#
# a) Required-Start/Required-Stop is used as hard dependencies, i.e. for
# services which have to be started before this service. For instance
# needs the 'nfs-kernel-server' the portmap service. Requiring
# Required-Start: $portmap
# ensures that the portmapper is started before the nfs server.
# If a required service is missing, an init script cannot be installed
# and an init script which is required by another cannot be removed.
#
# b) Should-Start/Should-Stop is used for weak dependencies. This ensures
# that the order of the init scripts is useful. A possible use for
# 'autofs' is to ask for
# Should-Start: nis
# which enables to read maps via NIS. Note that not all LSB install_initd
# programs support Should-Start (Debian's does) and therefore one should
# try hard not to rely on its support.
#
# The Required-Stop/Should-Stop usually contain the same services as
# Required-Start/Should-Start do.
#
# Besides using the services provided by the Provides section of
# init script, those predefined facilities are available
# (while they start with a $ they are no shell variables):
#
# a) LSB 1.1 facility names
# - $local_fs all local filesystems are mounted
# - $remote_fs all remote filesystems are mounted
# (note that /usr might be remote)
# - $syslog system logging is operational
# - $network low level networking (ethernet card etc.)
# - $named hostname resolution available
# - $netdaemons all network daemons are running
# (Removed in LSB 1.2)
# b) LSB 1.2 facility names
# - $time the system time has been set (e.g. NTP)
# - $portmap daemons providing SunRPC/ONCRPC portmapping service
# are running
#
# The LSB specifies those runlevels, most services use 3 and 5 for
# Default-Start and 0 1 2 6 for Default-Stop.
#
# 0 - halt
# 1 - single user mode
# 2 - multiuser with no network services exported
# 3 - normal/full multiuser
# 4 - reserved for local use (usually normal/full multiuser)
# 5 - multiuser with xdm or equivalent
# 6 - reboot
#
# Note on that script names should follow the LSB:
# http://www.linuxbase.org/spec/gLSB/gLSB/scrptnames.html
# There is a registry for script names that are reserved for use by
# distributions and registered script and provider names at
# http://www.lanana.org/
# Source LSB init functions
# This provides start_daemon, killproc, pidofproc,
# log_success_msg, log_failure_msg and log_warning_msg.
. /lib/lsb/init-functions
# Since init scripts are config files, they might be left after an uninstall
# Check whether the binary is still present:
FOO_BIN=/usr/sbin/FOO
test -x "$FOO_BIN" || {log_failure_msg "$FOO_BIN not installed"; exit 5}
# Check whether a required configuration file is available
FOO_CONFIG=/etc/FOO.conf
test -r "$FOO_CONFIG" || {log_failure_msg "$FOO_CONFIG not existing"; exit 6}
# Those LSB defined exit status codes shall be used (except for status)
# 0 sucess
# 1 generic or unspecified error (current practice)
# 2 invalid or excess argument(s)
# 3 unimplemented feature (for example, "reload")
# 4 user had insufficient privilege
# 5 program is not installed
# 6 program is not configured
# 7 program is not running
# 8-199 reserved (8-99 LSB, 100-149 distribution, 150-199 application)
#
# Note that those situation shall also be regarded as success:
# * restarting a service (instead of reloading it)
# with the "force-reload" argument
# * running "start" on a service already running
# * running "stop" on a service already stopped or not running
# * running "restart" on a service already stopped or not running
# * running "try-restart" on a service already stopped or not running
#
case "$1" in
start)
# Start service with startproc which shall return the
# LSB exit status
start_daemon "$FOO_BIN" -c "$FOO_CONFIG"
STATUS=$?
if [ "$STATUS" = 0 ]
then
log_success_msg "Starting FOO"
else
log_failure_msg "Starting FOO"
fi
exit $STATUS
;;
stop)
echo -n "Shutting down FOO "
# Stop the service with killproc which shall return the
# LSB exit status
killproc "$FOO_BIN"
STATUS=$?
if [ "$STATUS" = 0 ]
log_success_msg "Shutting down FOO"
exit 0
else
log_failure_msg "Shutting down FOO"
fi
exit $STATUS
;;
try-restart)
# Do a restart only if the service is running
# try-restart has been added to the LSB in 1.9
# RedHat's similar command is called condrestart.
$0 status > /dev/null
STATUS=$?
if [ "$STATUS" = 0 ]
then
$0 restart
else
log_success_msg "Try-Restarting FOO: not running"
fi
exit 0 # not running is also regarded as success
;;
restart)
# Restart service (if running) or start service
$0 stop
$0 start
;;
force-reload)
# Reload the configuartion. Usually a SIGHUP is used for this
# If it doesn't support his signal, restart it (only if running)
# Supports signalling
killproc -HUP "$FOO_BIN"
SIGNAL=$?
if [ "$SIGNAL" = 0 ]
then
log_success_msg "Reloading FOO"
else
log_failure_msg "Reloading FOO"
fi
exit $STATUS
# Otherwise
#$0 try-restart
;;
reload)
# Reload configuration file, but don't restart if it is not supported
# If it supports signaling:
killproc -HUP "$FOO_BIN"
SIGNAL=$?
if [ "$SIGNAL" = 0 ]
then
log_success_msg "Reloading FOO"
else
log_failure_msg "Reloading FOO"
fi
exit $STATUS
# Otherwise
# exit 3
;;
status)
# Use pidofproc to check the status of the service,
# pidofproc returns the exit status code of 0 when it the process is
# running.
# LSB defined exit status codes for status:
# 0 program is running or service is OK
# 1 program is dead and /var/run pid file exists
# 2 program is dead and /var/lock lock file exists
# 3 program is not running
# 4 program or service status is unknown
# 5-199 reserved (5-99 LSB, 100-149 distribution, 150-199 applications)
checkproc "$FOO_BIN" > /dev/null
STATUS=$?
if [ "$SIGNAL" = 0 ]
then
log_success_msg "Checking FOO"
else
log_warning_msg "Checking FOO: Not running"
fi
exit $STATUS
;;
*)
echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload}"
exit 1
;;
esac
|