#!/bin/bash # # snf-server Starts and stops the SNFServer daemon (RedHat). # # Author-- Alban Deniz # # Copyright (C) 2008 ARM Research Labs, LLC. # See www.armresearch.com for the copyright terms. # # chkconfig: 345 80 30 # description: SNFServer provides email filtering (anti-spam) services \ # See www.armresearch.com for details. # processname: SNFServer # Directory to run in. runDir=PREFIX/share/PACKAGE_NAME # Define mode files. debugModeFile=$runDir/debug_mode productionModeFile=$runDir/production_mode # Set debug mode flag. if [ -f $debugModeFile ] then debugMode=true fi # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Debug output file. debugOutputFile=/var/log/PACKAGE_NAME/debug.log # Location of installation. installedDir="PREFIX" # Location of programs. dir="$installedDir/sbin" # Name of config file. configFile="CONFFILE" # Name of daemon. debugProg="SNFDebugServer" productionProg="SNFServer" # Name of client. clientProg="SNFClient" # Name of user to run as. userName="snfilter" # Name of lockfile. lockFile="/var/lock/subsys/PACKAGE_NAME" # # Function to create the mode file. # createModeFile() { fileName=$1 # Remove any existing mode files. rm -f $productionModeFile $debugModeFile $fileName ( echo $"PACKAGE_NAME mode file" echo echo $"This file specifies whether PACKAGE_NAME is configured to run in" echo $"production mode or debug mode. If the name of this file is" echo $"'production_mode', then PACKAGE_NAME is configured to run in" echo $"production mode. If the name is 'debug_mode', then PACKAGE_NAME is" echo $"configured to run in debug mode." echo echo $"To run in debug mode:" echo echo $" 1) Run 'PACKAGE_NAME debug_mode'" echo echo $" 2) Run 'PACKAGE_NAME restart' (if PACKAGE_NAME is already running)," echo $" or 'PACKAGE_NAME start' (to start PACKAGE_NAME)" echo echo $"To run in production mode:" echo echo $" 1) Run 'PACKAGE_NAME production_mode'" echo echo $" 2) Run 'PACKAGE_NAME restart' (if PACKAGE_NAME is already running)," echo $" or 'PACKAGE_NAME start' (to start PACKAGE_NAME)" echo echo $"By default, PACKAGE_NAME is configured to run in production mode." ) > $fileName } start(){ echo -n $"Starting $productionProg: " for prog in $productionProg $debugProg do SNFPID=$(pidof -s $dir/$prog) if [ -n "$SNFPID" ] ; then echo -n $"$productionProg is already running" failure echo return 1 fi done # Start. if [ $debugMode ] then # Enable core dumps and start with strace and output redirected. (ulimit -c unlimited; \ su $userName -s /bin/sh -c \ "echo Starting $dir/$debugProg on $(date) >> $debugOutputFile"; \ cd PREFIX/share/PACKAGE_NAME; \ su $userName -c \ "strace -r -tt -v $dir/$debugProg $configFile >> $debugOutputFile 2>&1 &" \ -s /bin/sh) else (cd PREFIX/share/PACKAGE_NAME; \ su $userName -c "$dir/$productionProg $configFile > /dev/null 2>&1 &" \ -s /bin/sh > /dev/null 2>&1) fi RETVAL=$? if [ $RETVAL -eq 0 ]; then $dir/$clientProg -status.second > /dev/null 2>&1 RETVAL=$? fi if [ $RETVAL -eq 0 ]; then touch $lockFile success echo else failure echo fi return $RETVAL } stop(){ echo -n $"Stopping $productionProg: " DEBUG_SNFPID=$(pidof -s $dir/$debugProg) PRODUCTION_SNFPID=$(pidof -s $dir/$productionProg) if [ -n "$DEBUG_SNFPID" ] || [ -n "$PRODUCTION_SNFPID" ]; then $dir/$clientProg -shutdown > /dev/null 2>&1 sleep 10 # Check that the programs are no longer running. RETVAL=0 for prog in $debugProg $productionProg do SNFPID=$(pidof -s $dir/$prog) if [ -n "$SNFPID" ]; then kill $SNFPID RETVAL=$(($RETVAL+$?)) fi done else echo -n $"$productionProg is not running" RETVAL=1 failure echo fi if [ $RETVAL -eq 0 ]; then success echo rm -f $lockFile fi return $RETVAL } restart(){ stop start } # See how we were called. case "$1" in start) start ;; stop) stop ;; status) status $productionProg status $debugProg ;; restart) restart ;; debug_mode) # # Remove any mode flags, and create the debug_mode file. # echo $"Switching to debug mode" createModeFile $debugModeFile ;; production_mode) # # Remove any mode flags, and create the debug_mode file. # echo $"Switching to production mode" createModeFile $productionModeFile ;; *) echo $"Usage: $0 {start|stop|status|restart|production_mode|debug_mode}" exit 1 esac exit $?