This is what the perms look like on my setup: drwxr-xr-x 5 postfix celeryd 4096 Dec 5 2012 MailScanner drwxr-xr-x 294 postfix celeryd 12288 Jul 2 20:07 incoming drwxr-xr-x 19 postfix celeryd 4096 Jul 2 06:25 quarantine drwxr-xr-x 2 postfix celeryd 4096 Dec 5 2012 spamassassin
Hi, thanks for your reply. i checked and file /usr/lib/python2.7/dist-packages/setuptools.egg-info exists but is empty. The script you uploaded doesn't seem to work, but this one does (I basically did exactly what you said to do in your tutorial, but change the PIDFILE path) Code: #! /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 <[email protected]> # 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 CONFFILE=/etc/MailScanner/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:-www-data} #check_dir /var/lib/MailScanner ${user:-postfix} ${group:-www-data} #check_dir /var/run/MailScanner ${user:-postfix} ${group:-www-data} 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/MailScanner ${user:-postfix} ${group:-www-data} 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:www-data --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 For the permission, do you think my permissions are insecure ? they seem to work fine but I was unsure
Hi again, I want to thank you again for all your help (I feel I don't say it enough ) In any case, I must have done something odd, as when I set the same perms as you all my messages cannot be processed by mailscanner. If I set the write permission for the group on folder /var/spool/MailScanner/quarantine in addition to what you showed, everything works
Spamassassin sa-learn and exchange 2013 integration Just for those interested, I have written some lines on teh general way of getting spamassassin to learn messages from exchange after they are marked as spam by exchange users http://spamassassin.1065346.n5.nabble.com/sa-learn-and-exchange-integration-tp103510p106260.html It definitely works for small number of users. For larger environments I showed how I thought it should be done.
I am facing a problem with this howto and even opened a thread : http://www.howtoforge.com/forums/showthread.php?p=306340. Any help would be appreciated. Thanks
I managed to fix the problem with setuptools.egg-info by just remloving the file and reinstalling setup tools : sudo rm /usr/lib/python2.6/dist-packages/setuptools.egg-info sudo apt-get install --reinstall python-setuptools