# Typical Debian initscript, but as a library rather than copy-paste. # # Usage: # NAME=short-name # DESC="Textual description" # SCRIPTNAME=/etc/init.d/$NAME # default if omitted # . /lib/init/std-init.sh # do_start() { ... } # do_stop() { ... } # do_reload() { ... } # optional # std_init "$1" . /lib/init/vars.sh . /lib/lsb/init-functions [ -r /etc/default/"$NAME" ] && . /etc/default/"$NAME" SCRIPTNAME="${SCRIPTNAME:-/etc/init.d/$NAME}" have_reload() { type do_reload >/dev/null 2>/dev/null } usage_exit() { if have_reload; then echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2 else echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2 fi exit 3 } std_init() { local cmd case "$1" in start|stop|restart) cmd="$1" ;; reload) if have_reload; then cmd=reload; else usage_exit; fi ;; force-reload) if have_reload; then cmd=reload; else cmd=restart; fi ;; *) usage_exit ;; esac case $cmd in start) [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" do_start case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; stop) [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" do_stop case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; reload) log_daemon_msg "Reloading $DESC" "$NAME" do_reload log_end_msg $? ;; restart) log_daemon_msg "Restarting $DESC" "$NAME" do_stop case "$?" in 0|1) do_start case "$?" in 0) log_end_msg 0 ;; 1) log_end_msg 1 ;; # Old process is still running *) log_end_msg 1 ;; # Failed to start esac ;; *) # Failed to stop log_end_msg 1 ;; esac ;; esac : }