#!/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 . # ################################################################################ # # 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 :