148 lines
		
	
	
	
		
			4.4 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			148 lines
		
	
	
	
		
			4.4 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #!/bin/sh
 | |
| ################################################################################
 | |
| #
 | |
| #  Rattail -- Retail Software Framework
 | |
| #  Copyright © 2010-2018 Lance Edgar
 | |
| #
 | |
| #  This file is part of Rattail.
 | |
| #
 | |
| #  Rattail is free software: you can redistribute it and/or modify it under the
 | |
| #  terms of the GNU General Public License as published by the Free Software
 | |
| #  Foundation, either version 3 of the License, or (at your option) any later
 | |
| #  version.
 | |
| #
 | |
| #  Rattail 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 General Public License for more
 | |
| #  details.
 | |
| #
 | |
| #  You should have received a copy of the GNU General Public License along with
 | |
| #  Rattail.  If not, see <http://www.gnu.org/licenses/>.
 | |
| #
 | |
| ################################################################################
 | |
| #
 | |
| # Generic 'init' script for all Rattail daemons.  Originally based on the
 | |
| # skeleton file from a Debian 6 system, but tweaked plenty since...
 | |
| #
 | |
| # NOTE: The "calling" script *must* define $NAME and $DESC (at least).
 | |
| #
 | |
| ################################################################################
 | |
| 
 | |
| # Files in /etc/default and/or the "calling" init script may define any of the
 | |
| # following as necessary, to override:
 | |
| 
 | |
| SCRIPTNAME=${SCRIPTNAME:-"/etc/init.d/$NAME"}
 | |
| PIDFILE=${PIDFILE:-"/var/run/rattail/$NAME.pid"}
 | |
| 
 | |
| PYTHON=${PYTHON:-"/usr/bin/python"}
 | |
| RATTAIL=${RATTAIL:-"/usr/local/bin/rattail"}
 | |
| RATTAIL_ARGS=${RATTAIL_ARGS:-""}
 | |
| RATTAIL_SUBCMD=${RATTAIL_SUBCMD:-"${NAME##*-}"}
 | |
| RATTAIL_SUBCMD_ARGS=${RATTAIL_SUBCMD_ARGS:-""}
 | |
| 
 | |
| USER=${USER:-"rattail"}
 | |
| GROUP=${GROUP:-"rattail"}
 | |
| 
 | |
| 
 | |
| # Read configuration variable files if present.
 | |
| [ -r /etc/default/rattail ] && . /etc/default/rattail
 | |
| [ -r /etc/default/$NAME ] && . /etc/default/$NAME
 | |
| 
 | |
| # Load the VERBOSE setting and other rcS variables.
 | |
| . /lib/init/vars.sh
 | |
| 
 | |
| # Define LSB log_* functions.
 | |
| # Depend on lsb-base (>= 3.2-14) to ensure that this file is present
 | |
| # and status_of_proc is working.
 | |
| . /lib/lsb/init-functions
 | |
| 
 | |
| 
 | |
| create_pid_dir() {
 | |
|     PIDDIR=`dirname "$PIDFILE"`
 | |
|     if [ ! -d "$PIDDIR" ]; then
 | |
|         mkdir --parents "$PIDDIR"
 | |
|     fi
 | |
|     chown $USER:$GROUP "$PIDDIR"
 | |
| }
 | |
| 
 | |
| 
 | |
| #
 | |
| # Function that starts the daemon/service
 | |
| #
 | |
| do_start()
 | |
| {
 | |
|     # Return
 | |
|     #   0 if daemon has been started
 | |
|     #   1 if daemon was already running
 | |
|     #   2 if daemon could not be started
 | |
|     create_pid_dir
 | |
|     start-stop-daemon --start --pidfile "$PIDFILE" --exec "$PYTHON" --user $USER --test --quiet >/dev/null \
 | |
|         || return 1
 | |
|     start-stop-daemon --start --pidfile "$PIDFILE" --exec "$PYTHON" --startas "$RATTAIL" --chuid $USER --group $GROUP --quiet -- \
 | |
|         $RATTAIL_ARGS $RATTAIL_SUBCMD --pidfile="$PIDFILE" $RATTAIL_SUBCMD_ARGS start \
 | |
|         || return 2
 | |
| }
 | |
| 
 | |
| 
 | |
| #
 | |
| # Function that stops the daemon/service
 | |
| #
 | |
| do_stop()
 | |
| {
 | |
|     # Return
 | |
|     #   0 if daemon has been stopped
 | |
|     #   1 if daemon was already stopped
 | |
|     #   2 if daemon could not be stopped
 | |
|     #   other if a failure occurred
 | |
|     /usr/local/bin/check-rattail-daemon "$NAME" >/dev/null \
 | |
|         || return 1
 | |
|     sudo -u $USER "$RATTAIL" $RATTAIL_ARGS $RATTAIL_SUBCMD --pidfile="$PIDFILE" $RATTAIL_SUBCMD_ARGS stop >/dev/null 2>&1 \
 | |
|         || return 2
 | |
| }
 | |
| 
 | |
| 
 | |
| case "$1" 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
 | |
|         ;;
 | |
|     status)
 | |
|         /usr/local/bin/check-rattail-daemon "$NAME" && exit 0 || exit $?
 | |
|         ;;
 | |
|     restart|force-reload)
 | |
|         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
 | |
|         ;;
 | |
|     *)
 | |
|         echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
 | |
|         exit 3
 | |
|         ;;
 | |
| esac
 | |
| 
 | |
| :
 |