tip"Tip
The script features a status check that confirms the following:
  • Script run with necessary permissions (root)
  • Confirms correct version of script is being run (for O.S.)
  • Perl installation
  • JAVA environment variable
  • user is valid
  • locates the replicator binary
  • shutdown script
  • config file
  • replicator running
#!/bin/bash
#
# description: Ubuntu Linux dist compatible init.d script 
#              for starting/stopping WANdisco svnreplicator daemon
#
# Copyright (c) 2006-2016 WANdisco,Inc. Pleasanton,CA,USA
# All rights reserved.
#
# Author: WANdisco Support Staff <support@wandisco.com>
#
############################################################
# MODIFY THE FOLLOWING VARIBLES TO MATCH YOUR ENVIRONMENT

export JAVA_HOME=/usr/lib/jvm/java-6-sun
WD_USER="root"
WD_INSTALL_DIR="/home/user/svnrep/svn-replicator"
# (WD_INSTALL_DIR _MUST_ end with "/svn-replicator" or errors in installation can occur.

############################################################
# DO NOT MODIFY THESE VARIABLES

# Source function library.
. /lib/lsb/init-functions

CURRENT_OS=`uname -sv`
OS_DEFINER="/etc/debian_version"
PERL_LOC="/usr/bin"
WD_AGENT_NAME="svnreplicator"
WD_SHUTDOWN="${WD_INSTALL_DIR}/bin/shutdown"
WD_AGENT_BIN="${WD_INSTALL_DIR}/bin/${WD_AGENT_NAME}"
WD_AGENT_CONF="${WD_INSTALL_DIR}/config/prefs.xml"

# Maximum number of file descriptors.
MAXFDS="65000"

############################################################

# Startup procedure.
start() {

# Checks to see if the replicator is running.
REPRUN=`ps ax | grep "${WD_AGENT_NAME}" | grep -v grep | wc -l` 
RETVAL=$?

if [ ${REPRUN} -gt 0 ]
then
  echo "The replicator is already running."
  echo "------------------------------"
else
  echo "Starting ${WD_AGENT_BIN}:"
  # Don't produce core files.
  ulimit -S -c 0 >/dev/null 2>&1
  # Set maximum number of file descriptors.
  ulimit  -n ${MAXFDS} >/dev/null 2>&1
  start-stop-daemon --start --quiet --chuid ${WD_USER} --exec ${WD_AGENT_BIN} > /dev/null 2>&1

  # Checks the last transaction and returns a value depending on success or failure.
  RETVAL=$?

  # Sleep to prevent errors in restarts.
  sleep 4

  if [ ${RETVAL} -eq 0 ] 
  then
    echo "Status Code: $RETVAL: The ${WD_AGENT_NAME} started successfully."
    echo "------------------------------"
  fi

  if [ ${RETVAL} -eq 2 ] 
  then
    echo "Status Code: $RETVAL: The ${WD_AGENT_NAME} failed to start successfully."
    status
  fi
fi
}

############################################################

# Shutdown procedure.
stop() {


REPRUN=`ps ax | grep "${WD_AGENT_NAME}" | grep -v grep | wc -l` 
RETVAL=$?

# Checks to see if the replicator is running. If it is, script will shut it down, otherwise
a message will be printed.
if [ ${REPRUN} -gt 0 ]
then
  echo "Shutting down ${WD_AGENT_NAME}"
  start-stop-daemon --start --chuid ${WD_USER} --exec ${WD_SHUTDOWN} > /dev/null 2>&1

  # Checks the last transaction and returns a value depending on success or failure.
  RETVAL=$?
  
  # Sleep to prevent errors in restarts.
  sleep 4

  if [ ${RETVAL} -eq 0 ] 
  then
    echo "Status Code: $RETVAL: The ${WD_AGENT_NAME} shutdown successfully."
    echo "------------------------------"
  fi

  if [ ${RETVAL} -eq 2 ]
  then
    echo "Status Code: $RETVAL: The ${WD_AGENT_NAME} failed to shut down successfully."
    status
  fi
else
  echo "The replicator is currently not running."
  echo "------------------------------"
fi

}

############################################################

# Replicator status checker.
status() {

echo "------------------------------"

# Checks for to make sure that the person running the script is root.

if [ `id -u` = 0 ]
then
  echo "[OK] This script is being run by root."
else
  echo "[FAIL] This script is not being run by root. Please switch the user to root
  to avoid any potential errors."
fi

echo "------------------------------"

echo "The current operating system is ${CURRENT_OS}."
# Checks the system info see if Ubuntu is installed.
if test -f "${OS_DEFINER}"
then
  echo "[OK] The current operating system is valid to run this script."
else
  echo "[FAIL] You are not running on this script on a valid operating system."
fi

echo "------------------------------"

echo "Checking ${PERL_LOC} for Perl binary."
# Checks to see if Perl is installed.
if test -f "${PERL_LOC}/perl"
then
  echo "[OK] Perl is installed on this machine."
else
  echo "[FAIL] Could not find Perl on this machine."
fi

echo "------------------------------"

echo "The Java environment variable is currently set to: ${JAVA_HOME}"
# Tests for the JAVA_HOME variable.
if test -f "${JAVA_HOME}/bin/java"
then
  echo "[OK] The JAVA_HOME variable is set correctly."
else
  echo "[FAIL] The JAVA_HOME variable is not set correctly."
fi

echo "------------------------------"

echo "The user is currently set to: ${WD_USER}"
# Tests to see if a valid user exists.
id "${WD_USER}" >/dev/null 2>&1
RETVAL=$?
if [ ${RETVAL} -eq 0 ]
then
  echo "[OK] This is a valid user."
else
  echo "[FAIL] This is not a valid user."
fi

echo "------------------------------"

# Returns the base directory of the {WD_INSTALL_DIR}.
BASE_INS_DIR=`basename ${WD_INSTALL_DIR}`

echo "The install directory is currently set to: ${WD_INSTALL_DIR}"
# Checks to see if the WD_INSTALL_DIR ends with "/svn-replicator"
if `[ "${BASE_INS_DIR}" == "svn-replicator" ]`
then
  echo "[OK] The replicator is installed to a suitable directory."
else
  echo "[FAIL] Please rename the replicator install directory to /svn-replicator to
  avoid installation errors."
fi

echo "------------------------------"

echo "The replicator binary is currently set to: ${WD_AGENT_BIN}"
# Checks to see if the replicator binary exists in the specified directory.
if test -f "${WD_AGENT_BIN}"
then
  echo "[OK] The replicator script was found successfully."
else
  echo "[FAIL] The replicator script was not found."
fi

echo "------------------------------"

echo "The shutdown script is currently set to: ${WD_SHUTDOWN}"
# Checks to see if the config file exists.
if test -f "${WD_SHUTDOWN}"
then
  echo "[OK] The shutdown script was found successfully."
else
  echo "[FAIL] The shutdown script was not found."
fi

echo "------------------------------"

echo "The config file is currently set to: ${WD_AGENT_CONF}"
# Checks to see if the config file is readable.
if test -r "${WD_AGENT_CONF}"
then
  echo "[OK] The config file could be read."
else
  echo "[FAIL] The config file could not be read."
fi

echo "------------------------------"

# Checks to see if the replicator is running.
if ps ax | grep -v grep | grep ${WD_AGENT_BIN} > /dev/null
then
  # Returns the process ID of the replicator and checks the relevent file for the file descriptors.
  PROC_ID=`pidof -sx "${WD_AGENT_BIN}"`
  FDS_LOC=`grep -i "Max open files *${MAXFDS}" /proc/${PROC_ID}/limits`
  RETVAL=$?

  echo "The attempted max number of set file descriptors is ${MAXFDS}."
  # Checks the /proc/${PROC_ID}/limits file for the file descriptors.
  if [ ${RETVAL} -eq 0 ]
  then
    echo "[OK] The file descriptors were set successfully."
    echo "------------------------------"
  else
    echo "[FAIL] The file descriptors were not set successfully."
    echo "------------------------------"
  fi
  echo "[OK] The replicator is currently running."

else
  echo "[FAIL] The replicator is currently not running."
fi

echo "------------------------------"

}

############################################################

# Restart procedure.
restart() {

  stop
  sleep 4
  start

}

############################################################

case "$1" in
start)
  start
  ;;
stop)
  stop
  ;;
status)
  status
  ;;
restart|reload)
  restart
  ;;
*)

echo $"Usage: $0 {start|stop|status|restart}"
exit 1

esac