View Single Post
  #7  
Old 13th March 2013, 19:21
huey23 huey23 is offline
Junior Member
 
Join Date: May 2010
Posts: 17
Thanks: 1
Thanked 1 Time in 1 Post
Default

Thanks Rocky! Great help and great tutorial, as always.

I got it to work by tweaking the script /etc/init.d/mailscanner

Here is what I did:

1) Look in MailScanner.conf and find the line that says "PID file" and copy the PID file and location.
2) Define the variable "PIDFILE" after "CONFFILE" with your PID file location. Mine looks like this but ymmv
Code:
CONFFILE=/opt/MailScanner/etc/MailScanner.conf
PIDFILE=/opt/MailScanner/var/MailScanner.pid

3) Comment out this line
Code:
start-stop-daemon --start --quiet --startas $STARTAS --name $NAME --test > /dev/null \
4) Add this line right below it
Code:
start-stop-daemon --start --quiet --startas $STARTAS  --pidfile "$PIDFILE" --test > /dev/null \
5) Comment out this line
Code:
start-stop-daemon --start --quiet --nicelevel $run_nice --chuid postfix:celeryd --exec $DAEMON --name $NAME -- $DAEMON_ARGS \
6) Add this line right below that
Code:
start-stop-daemon --start --quiet --nicelevel $run_nice --chuid postfix:celeryd --exec $DAEMON  --pidfile "$PIDFILE" -- $DAEMON_ARGS \
7) Comment out this line
Code:
start-stop-daemon --stop --retry=TERM/30 --name $NAME
8) Add this line right below that
Code:
start-stop-daemon --stop --retry=TERM/30 --pidfile "$PIDFILE"
9) Finally, comment out this line
Code:
start-stop-daemon --stop --signal 1 --quiet --name $NAME
10) And add this line right below that
Code:
start-stop-daemon --stop --signal 1 --quiet --pidfile "$PIDFILE"
Here is the contents of my updated, working startup script for those of you who do not have it working
#! /bin/sh
### BEGIN INIT INFO
# Provides: MailScanner daemon
# Required-Start: $local_fs $remote_fs
# Required-Stop: $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Controls mailscanner instances
# Description: MailScanner is a queue-based spam/virus filter
### END INIT INFO
# Author: Simon Walter <simon.walter@hp-factory.de>
# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/usr/sbin:/usr/bin:/bin:/sbin:/opt/MailScanner/bin
DESC="mail spam/virus scanner"
NAME=MailScanner
PNAME=mailscanner
DAEMON=/opt/MailScanner/bin/$NAME
STARTAS=MailScanner
SCRIPTNAME=/etc/init.d/$PNAME
CONFFILE=/opt/MailScanner/etc/MailScanner.conf
PIDFILE=/opt/MailScanner/var/MailScanner.pid
# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0
run_nice=0
stopped_lockfile=/var/lock/subsys/MailScanner.off
# Read configuration variable file if it is present
[ -r /etc/default/$PNAME ] && . /etc/default/$PNAME
# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions
# sanity check for permissions
fail()
{
echo >&2 "$0: $1"
exit 1
}
check_dir()
{
if [ ! -d $1 ]; then
mkdir -p "$1" || \
fail "directory $1: does not exist and cannot be created"
fi
actual="$(stat -c %U $1)"
if [ "$actual" != "$2" ]; then
chown -R "$2" "$1" || \
fail "directory $1: wrong owner (expected $2 but is $actual)"
fi
actual="$(stat -c %G $1)"
if [ "$actual" != "$3" ]; then
chgrp -R "$3" "$1" || \
fail "directory $1: wrong group (expected $3 but is $actual)"
fi
}
user=$(echo $(awk -F= '/^Run As User/ {print $2; exit}' $CONFFILE))
group=$(echo $(awk -F= '/^Run As Group/ {print $2; exit}' $CONFFILE))
check_dir /var/spool/MailScanner ${user:-postfix} ${group:-celeryd}
check_dir /var/lib/MailScanner ${user:-postfix} ${group:-celeryd}
check_dir /var/run/MailScanner ${user:-postfix} ${group:-celeryd}
check_dir /var/lock/subsys ${user:-root} ${group:-root} #Required to Create Folder
#check_dir /var/lock/subsys ${user:-postfix} ${group:-celeryd} #Required to Create Folder
check_dir /var/lock/subsys/MailScanner ${user:-postfix} ${group:-celeryd}
#
# 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
# start-stop-daemon --start --quiet --startas $STARTAS --name $NAME --test > /dev/null \
start-stop-daemon --start --quiet --startas $STARTAS --pidfile "$PIDFILE" --test > /dev/null \
|| return 1
# start-stop-daemon --start --quiet --nicelevel $run_nice --chuid postfix:celeryd --exec $DAEMON --name $NAME -- $DAEMON_ARGS \
start-stop-daemon --start --quiet --nicelevel $run_nice --chuid postfix:celeryd --exec $DAEMON --pidfile "$PIDFILE" -- $DAEMON_ARGS \
|| return 2
# Add code here, if necessary, that waits for the process to be ready
# to handle requests from services started subsequently which depend
# on this one. As a last resort, sleep for some time.
# Set lockfile to inform cronjobs about the running daemon
RETVAL="$?"
if [ $RETVAL -eq 0 ]; then
touch /var/lock/subsys/mailscanner
rm -f $stopped_lockfile
fi
if [ $RETVAL -eq 0 ]; then
echo "MailScanner Started"
fi
}
#
# 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
# start-stop-daemon --stop --retry=TERM/30 --name $NAME
start-stop-daemon --stop --retry=TERM/30 --pidfile "$PIDFILE"
RETVAL="$?"
[ "$RETVAL" = 2 ] && return 2
# Remove lockfile for cronjobs
if [ $RETVAL -eq 0 ]; then
rm -f /var/lock/subsys/mailscanner
touch $stopped_lockfile
fi
if [ $RETVAL -eq 0 ]; then
echo "MailScanner Stopped"
fi
}
#
# Function that sends a SIGHUP to the daemon/service
#
do_reload() {
# start-stop-daemon --stop --signal 1 --quiet --name $NAME
start-stop-daemon --stop --signal 1 --quiet --pidfile "$PIDFILE"
return 0
}
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
;;
restart|force-reload)
#
# If the "reload" option is implemented then remove the
# 'force-reload' alias
#
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|restart|force-reload}" >&2
exit 3
;;
esac
exit 0
Reply With Quote