#! /bin/sh # # Copyright (C) Kern Sibbald 2000-2015 # License: BSD 2-Clause # # bacula This shell script takes care of starting and stopping # the bacula daemons. # # This is pretty much watered down version of the RedHat script # that works on Solaris as well as Linux, but it won't work everywhere. # # Submitted by Volker Sauer 21Feb04 # Tweaked a bit by Kern to convert it to a .in file # # description: The Leading Open Source Backup Solution. # ### BEGIN INIT INFO # Provides: bacula # Required-Start: network mysql # Required-Stop: # Default-Start: 3 5 # Default-Stop: # Description: run bacula daemon(s) ### END INIT INFO PSCMD="@PSCMD@" PIDDIR=@piddir@ SUBSYSDIR=@subsysdir@ # A function to stop a program. killproc() { RC=0 # Test syntax. if [ $# = 0 ]; then echo "Usage: killproc {program} [signal]" return 1 fi notset=0 # check for third arg to be kill level if [ "$3" != "" ] ; then killlevel=$3 else notset=1 killlevel="-9" fi # Get base program name base=`basename $1` # Find pid. pid=`pidofproc $base $2` # Kill it. if [ "$pid" != "" ] ; then if [ "$notset" = "1" ] ; then if ps -p $pid>/dev/null 2>&1; then # TERM first, then KILL if not dead kill -TERM $pid 2>/dev/null sleep 1 if ps -p $pid >/dev/null 2>&1 ; then sleep 1 if ps -p $pid >/dev/null 2>&1 ; then sleep 3 if ps -p $pid >/dev/null 2>&1 ; then kill -KILL $pid 2>/dev/null fi fi fi fi ps -p $pid >/dev/null 2>&1 RC=$? [ $RC -eq 0 ] && failure "$base shutdown" || success "$base shutdown" # RC=$((! $RC)) # use specified level only else if ps -p $pid >/dev/null 2>&1; then kill $killlevel $pid 2>/dev/null RC=$? [ $RC -eq 0 ] && success "$base $killlevel" || failure "$base $killlevel" fi fi else failure "$base shutdown" fi # Remove pid file if any. if [ "$notset" = "1" ]; then rm -f ${PIDDIR}/$base.$2.pid fi return $RC } # A function to find the pid of a program. pidofproc() { pid="" # Test syntax. if [ $# = 0 ] ; then echo "Usage: pidofproc {program}" return 1 fi # Get base program name base=`basename $1` # First try PID file if [ -f ${PIDDIR}/$base.$2.pid ] ; then pid=`head -1 ${PIDDIR}/$base.$2.pid` if [ "$pid" != "" ] ; then echo $pid return 0 fi fi # Next try "pidof" if [ -x /sbin/pidof ] ; then pid=`/sbin/pidof $1` fi if [ "$pid" != "" ] ; then echo $pid return 0 fi # Finally try to extract it from ps ${PSCMD} | grep $1 | awk '{ print $1 }' | tr '\n' ' ' return 0 } status() { # Test syntax. if [ $# = 0 ] ; then echo "Usage: status {program}" return 1 fi # Get base program name base=`basename $1` # First try "pidof" if [ -x /sbin/pidof ] ; then pid=`/sbin/pidof $1` fi if [ "$pid" != "" ] ; then echo "$base (pid $pid) is running..." return 0 else pid=`${PSCMD} | awk 'BEGIN { prog=ARGV[1]; ARGC=1 } { if ((prog == $2) || (("(" prog ")") == $2) || (("[" prog "]") == $2) || ((prog ":") == $2)) { print $1 ; exit 0 } }' $1` if [ "$pid" != "" ] ; then echo "$base (pid $pid) is running..." return 0 fi fi # Next try the PID files if [ -f ${PIDDIR}/$base.$2.pid ] ; then pid=`head -1 ${PIDDIR}/$base.$2.pid` if [ "$pid" != "" ] ; then echo "$base not running, but pid file exists" return 1 fi fi # See if the subsys lock exists if [ -f ${SUBSYSDIR}/$base ] ; then echo "$base not running, but subsys locked" return 2 fi echo "$base is stopped" return 3 } success() { return 0 } failure() { rc=$? return $rc } case "$1" in start) echo "Starting the Storage daemon" @sbindir@/bacula-sd $2 -v -c @sysconfdir@//bacula-sd.conf echo "Starting the File daemon" @sbindir@/bacula-fd $2 -v -c @sysconfdir@//bacula-fd.conf sleep 2 echo "Starting the Director daemon" @sbindir@/bacula-dir $2 -v -c @sysconfdir@//bacula-dir.conf ;; stop) echo "Stopping the File daemon" killproc @sbindir@/bacula-fd 9102 echo "Stopping the Storage daemon" killproc @sbindir@/bacula-sd 9103 echo "Stopping the Director daemon" killproc @sbindir@/bacula-dir 9101 echo ;; restart) $0 stop sleep 5 $0 start ;; status) status @sbindir@/bacula-sd 9103 status @sbindir@/bacula-fd 9102 status @sbindir@/bacula-dir 9101 ;; *) echo "Usage: $0 {start|stop|restart|status}" exit 1 ;; esac exit 0