149 lines
		
	
	
	
		
			4.4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
		
		
			
		
	
	
			149 lines
		
	
	
	
		
			4.4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
|  | #!/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 | ||
|  | 
 | ||
|  | : |