您的位置:首页 > 其它

SuSE下chkconfig的启动脚本参考例子"/etc/init.d/skeleton”

2009-05-14 11:59 423 查看


SuSE下chkconfig的启动脚本参考例子"/etc/init.d/skeleton”

#!/bin/sh

#

# Template SUSE system startup script for example service/daemon FOO

# Copyright (C) 1995--2005 Kurt Garloff, SUSE / Novell Inc.

#

# This library is free software; you can redistribute it and/or modify it

# under the terms of the GNU Lesser General Public License as published by

# the Free Software Foundation; either version 2.1 of the License, or (at

# your option) any later version.

#

# This library is distributed in the hope that it will be useful, but

# WITHOUT ANY WARRANTY; without even the implied warranty of

# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU

# Lesser General Public License for more details.

#

# You should have received a copy of the GNU Lesser General Public

# License along with this library; if not, write to the Free Software

# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307,

# USA.

#

# /etc/init.d/FOO

# and its symbolic link

# /(usr/)sbin/rcFOO

#

# Template system startup script for some example service/daemon FOO

#

# LSB compatible service control script; see http://www.linuxbase.org/spec/

#

# Note: This template uses functions rc_XXX defined in /etc/rc.status on

# UnitedLinux/SUSE/Novell based Linux distributions. If you want to base your

# script on this template and ensure that it works on non UL based LSB

# compliant Linux distributions, you either have to provide the rc.status

# functions from UL or change the script to work without them.

# See skeleton.compat for a template that works with other distros as well.

#

### BEGIN INIT INFO

# Provides: FOO

# Required-Start: $syslog $remote_fs

# Should-Start: $time ypbind sendmail

# Required-Stop: $syslog $remote_fs

# Should-Stop: $time ypbind sendmail

# Default-Start: 3 5

# Default-Stop: 0 1 2 6

# Short-Description: FOO XYZ daemon providing ZYX

# Description: Start FOO to allow XY and provide YZ

# continued on second line by '#<TAB>'

# should contain enough info for the runlevel editor

# to give admin some idea what this service does and

# what it's needed for ...

# (The Short-Description should already be a good hint.)

### END INIT INFO

#

# Any extensions to the keywords given above should be preceeded by

# X-VendorTag- (X-UnitedLinux- X-SuSE- for us) according to LSB.

#

# Notes on Required-Start/Should-Start:

# * There are two different issues that are solved by Required-Start

# and Should-Start

# (a) Hard dependencies: This is used by the runlevel editor to determine

# which services absolutely need to be started to make the start of

# this service make sense. Example: nfsserver should have

# Required-Start: $portmap

# Also, required services are started before the dependent ones.

# The runlevel editor will warn about such missing hard dependencies

# and suggest enabling. During system startup, you may expect an error,

# if the dependency is not fulfilled.

# (b) Specifying the init script ordering, not real (hard) dependencies.

# This is needed by insserv to determine which service should be

# started first (and at a later stage what services can be started

# in parallel). The tag Should-Start: is used for this.

# It tells, that if a service is available, it should be started

# before. If not, never mind.

# * When specifying hard dependencies or ordering requirements, you can

# use names of services (contents of their Provides: section)

# or pseudo names starting with a $. The following ones are available

# according to LSB (1.1):

# $local_fs all local file systems are mounted

# (most services should need this!)

# $remote_fs all remote file systems are mounted

# (note that /usr may be remote, so

# many services should Require this!)

# $syslog system logging facility up

# $network low level networking (eth card, ...)

# $named hostname resolution available

# $netdaemons all network daemons are running

# The $netdaemons pseudo service has been removed in LSB 1.2.

# For now, we still offer it for backward compatibility.

# These are new (LSB 1.2):

# $time the system time has been set correctly

# $portmap SunRPC portmapping service available

# UnitedLinux extensions:

# $ALL indicates that a script should be inserted

# at the end

# * The services specified in the stop tags

# (Required-Stop/Should-Stop)

# specify which services need to be still running when this service

# is shut down. Often the entries there are just copies or a subset

# from the respective start tag.

# * Should-Start/Stop are now part of LSB as of 2.0,

# formerly SUSE/Unitedlinux used X-UnitedLinux-Should-Start/-Stop.

# insserv does support both variants.

# * X-UnitedLinux-Default-Enabled: yes/no is used at installation time

# (%fillup_and_insserv macro in %post of many RPMs) to specify whether

# a startup script should default to be enabled after installation.

# It's not used by insserv.

#

# Note on runlevels:

# 0 - halt/poweroff 6 - reboot

# 1 - single user 2 - multiuser without network exported

# 3 - multiuser w/ network (text mode) 5 - multiuser w/ network and X11 (xdm)

#

# Note on script names:

# http://www.linuxbase.org/spec/refspecs/LSB_1.3.0/gLSB/gLSB/scrptnames.html

# A registry has been set up to manage the init script namespace.

# http://www.lanana.org/

# Please use the names already registered or register one or use a

# vendor prefix.

# Check for missing binaries (stale symlinks should not happen)

# Note: Special treatment of stop for LSB conformance

FOO_BIN=/usr/sbin/FOO

test -x $FOO_BIN || { echo "$FOO_BIN not installed";

if [ "$1" = "stop" ]; then exit 0;

else exit 5; fi; }

# Check for existence of needed config file and read it

FOO_CONFIG=/etc/sysconfig/FOO

test -r $FOO_CONFIG || { echo "$FOO_CONFIG not existing";

if [ "$1" = "stop" ]; then exit 0;

else exit 6; fi; }

# Read config

. $FOO_CONFIG

# Source LSB init functions

# providing start_daemon, killproc, pidofproc,

# log_success_msg, log_failure_msg and log_warning_msg.

# This is currently not used by UnitedLinux based distributions and

# not needed for init scripts for UnitedLinux only. If it is used,

# the functions from rc.status should not be sourced or used.

#. /lib/lsb/init-functions

# Shell functions sourced from /etc/rc.status:

# rc_check check and set local and overall rc status

# rc_status check and set local and overall rc status

# rc_status -v be verbose in local rc status and clear it afterwards

# rc_status -v -r ditto and clear both the local and overall rc status

# rc_status -s display "skipped" and exit with status 3

# rc_status -u display "unused" and exit with status 3

# rc_failed set local and overall rc status to failed

# rc_failed <num> set local and overall rc status to <num>

# rc_reset clear both the local and overall rc status

# rc_exit exit appropriate to overall rc status

# rc_active checks whether a service is activated by symlinks

. /etc/rc.status

# Reset status of this service

rc_reset

# Return values acc. to LSB for all commands but status:

# 0 - success

# 1 - generic or unspecified error

# 2 - invalid or excess argument(s)

# 3 - unimplemented feature (e.g. "reload")

# 4 - user had insufficient privileges

# 5 - program is not installed

# 6 - program is not configured

# 7 - program is not running

# 8--199 - reserved (8--99 LSB, 100--149 distrib, 150--199 appl)

#

# Note that starting an already running service, stopping

# or restarting a not-running service as well as the restart

# with force-reload (in case signaling is not supported) are

# considered a success.

case "$1" in

start)

echo -n "Starting FOO "

## Start daemon with startproc(8). If this fails

## the return value is set appropriately by startproc.

/sbin/startproc $FOO_BIN

# Remember status and be verbose

rc_status -v

;;

stop)

echo -n "Shutting down FOO "

## Stop daemon with killproc(8) and if this fails

## killproc sets the return value according to LSB.

/sbin/killproc -TERM $FOO_BIN

# Remember status and be verbose

rc_status -v

;;

try-restart|condrestart)

## Do a restart only if the service was active before.

## Note: try-restart is now part of LSB (as of 1.9).

## RH has a similar command named condrestart.

if test "$1" = "condrestart"; then

echo "${attn} Use try-restart ${done}(LSB)${attn} rather than condrestart ${warn}(RH)${norm}"

fi

$0 status

if test $? = 0; then

$0 restart

else

rc_reset # Not running is not a failure.

fi

# Remember status and be quiet

rc_status

;;

restart)

## Stop the service and regardless of whether it was

## running or not, start it again.

$0 stop

$0 start

# Remember status and be quiet

rc_status

;;

force-reload)

## Signal the daemon to reload its config. Most daemons

## do this on signal 1 (SIGHUP).

## If it does not support it, restart the service if it

## is running.

echo -n "Reload service FOO "

## if it supports it:

/sbin/killproc -HUP $FOO_BIN

#touch /var/run/FOO.pid

rc_status -v

## Otherwise:

#$0 try-restart

#rc_status

;;

reload)

## Like force-reload, but if daemon does not support

## signaling, do nothing (!)

# If it supports signaling:

echo -n "Reload service FOO "

/sbin/killproc -HUP $FOO_BIN

#touch /var/run/FOO.pid

rc_status -v

## Otherwise if it does not support reload:

#rc_failed 3

#rc_status -v

;;

status)

echo -n "Checking for service FOO "

## Check status with checkproc(8), if process is running

## checkproc will return with exit status 0.

# Return value is slightly different for the status command:

# 0 - service up and running

# 1 - service dead, but /var/run/ pid file exists

# 2 - service dead, but /var/lock/ lock file exists

# 3 - service not running (unused)

# 4 - service status unknown :-(

# 5--199 reserved (5--99 LSB, 100--149 distro, 150--199 appl.)

# NOTE: checkproc returns LSB compliant status values.

/sbin/checkproc $FOO_BIN

# NOTE: rc_status knows that we called this init script with

# "status" option and adapts its messages accordingly.

rc_status -v

;;

probe)

## Optional: Probe for the necessity of a reload, print out the

## argument to this init script which is required for a reload.

## Note: probe is not (yet) part of LSB (as of 1.9)

test /etc/FOO/FOO.conf -nt /var/run/FOO.pid && echo reload

;;

*)

echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload|probe}"

exit 1

;;

esac

rc_exit

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: