Darek M wrote: > Hey guys, new member here, go easy on me. > > I have two questions to which I didn't really find an answer on the > page nor the archived lists. > > 1. What is clamd, what is its function relating to ClamAV and is it > required for ClamAV to run? I have ClamAV running on one machine > without clamd and all seems well. On another, qmail-scanner gives me > an error as soon as clamd dies. Both use qmail-scanner and both > scripts use clamdscanner. > > 2. clamd dies on me on signal 11 (core dump). Is this a common issue? > If so, is there a fix? Regardless of the last question, does anyone > have a solid script that looks for clamd and restarts it if it is down? > Tried doing my own but it seems flakey. A system call in perl to > /usr/local/sbin/clamd doesn't bring it back up.
clamd from clamav-0.60 dies ocassionally on me too. I run FreeBSD 4.8-RELEASE on a Dell PowerEdge 4300. I have the core files if anyone wants to see them (two of them). I "solved" the problem by running clamd under DJB's daemontools package. daemontools includes a program called "supervise", which will monitor the script and restart it if it dies. I have attached a plain text step-by-step HOWTO guide, roughly after the style of Life With Qmail. It assumes that you already have clamd installed and running properly. Let me know if you like it. -- Jesse Guardiani, Systems Administrator WingNET Internet Services, P.O. Box 2605 // Cleveland, TN 37320-2605 423-559-LINK (v) 423-559-5145 (f) http://www.wingnet.net
# ----------------------------------------------------------------- # 32.) do the Clam AV post-install configuration # ----------------------------------------------------------------- vim /usr/local/etc/clamav.conf # -- # Do the following to the clamav.conf file: # ----------------------------------------- # 1.) Comment out "Example" line. # 2.) Uncomment "LogSyslog" # 3.) Uncomment "StreamSaveToDisk" # 4.) Uncomment "MaxThreads" and change value to "30" # 5.) Uncomment "User" and change value to "qmailq" # 6.) Uncomment "Foreground" # 7.) Uncomment "ScanMail" # -- # -- # Create the clamav directory # -- mkdir -p /usr/local/clamav/bin # -- # Create the clamdctl script # -- vim /usr/local/clamav/bin/clamdctl # ***************************************************************** # NOTE: Place this script in /usr/local/clamav/bin/clamdctl # ***************************************************************** #!/bin/sh # For Red Hat chkconfig # chkconfig: - 80 30 # description: the ClamAV clamd daemon PATH=/usr/local/clamav/bin:/bin:/usr/bin:/usr/local/bin:/usr/local/sbin export PATH case "$1" in start) echo "Starting clamd" if svok /service/clamd ; then svc -u /service/clamd else echo clamd supervise not running fi if [ -d /var/lock/subsys ]; then touch /var/lock/subsys/clamd fi ;; stop) echo "Stopping clamd..." echo " clamd" svc -d /service/clamd if [ -f /var/lock/subsys/clamd ]; then rm /var/lock/subsys/clamd fi ;; stat) svstat /service/clamd svstat /service/clamd/log ;; restart) echo "Restarting clamd:" echo "* Stopping clamd." svc -d /service/clamd echo "* Sending clamd SIGTERM and restarting." svc -t /service/clamd echo "* Restarting clamd." svc -u /service/clamd ;; hup) echo "Sending HUP signal to clamd." svc -h /service/clamd ;; help) cat <<HELP stop -- stops clamd service (smtp connections refused, nothing goes out) start -- starts clamd service (smtp connection accepted, mail can go out) stat -- displays status of clamd service restart -- stops and restarts the clamd service hup -- same as reload HELP ;; *) echo "Usage: $0 {start|stop|stat|restart|hup|help}" exit 1 ;; esac exit 0 # -- # Create your boot symlink to clamdctl: # -- ln -s /usr/local/clamav/bin/clamdctl /usr/local/etc/rc.d/clamdctl.sh # -- # Make clamdctl an executable and link to path: # -- chmod 755 /usr/local/clamav/bin/clamdctl chown clamav /usr/local/clamav/bin/clamdctl ln -s /usr/local/clamav/bin/clamdctl /usr/local/bin # -- # Create the supervise directories for the clamd service: # -- mkdir -p /usr/local/clamav/supervise/clamd/log vim /usr/local/clamav/supervise/clamd/run # -- # Create the /usr/local/clamav/supervise/clamd/run file: # -- #!/bin/sh # # -------------------------------------------------- # run # # Purpose - Start the clamd daemon/service. # # Author - Jesse D. Guardiani # Created - 09/10/03 # Modified - 09/10/03 # -------------------------------------------------- # This script is designed to be run under DJB's # daemontools package. # # ChangeLog # --------- # # 09/10/03 - JDG # -------------- # - Created # -------------------------------------------------- # Copyright (C) 2003 WingNET Internet Services # Contact: Jesse D. Guardiani <[EMAIL PROTECTED]> # -------------------------------------------------- lockfile="/tmp/clamd" # Location of clamd lock file path_to_clamd="/usr/local/sbin/clamd" # Location of the clamd binary BAD_EXIT_CODE=1 # The exit code we use to announce that something bad has happened # The following pipeline is designed to return the pid of each # clamd process currently running. get_clam_pids_pipeline=`ps -ax | grep -E "${path_to_clamd}\$" | grep -v grep | awk '{print $1}'` # -------------------------------------------------- # Generic helper functions # -------------------------------------------------- # Basic return code error message function die_rcode() { EXIT_CODE=$1 ERROR_MSG=$2 if [ $EXIT_CODE -ne '0' ]; then echo "$ERROR_MSG" 1>&2 echo "Exiting!" 1>&2 exit "$BAD_EXIT_CODE" fi } # -------------------------------------------------- # Main # -------------------------------------------------- ps_clamd="" ps_clamd="$get_clam_pids_pipeline" if [ -n "$ps_clamd" ]; then pid_count="0" for pid in $ps_clamd do pid_count=`expr $pid_count + 1` done die_rcode $BAD_EXIT_CODE "Error: $pid_count clamd process(es) already running!" fi if [ -e "$lockfile" ]; then rm "$lockfile" exit_code="$?" die_rcode $exit_code "Error: 'rm $lockfile' call failed." fi exec /usr/local/bin/setuidgid qmailq $path_to_clamd vim /usr/local/clamav/supervise/clamd/log/run # -- # Create the /usr/local/clamav/supervise/clamd/log/run file: # -- #!/bin/sh exec /usr/local/bin/setuidgid qmailq /usr/local/bin/multilog t s1000000 n20 /var/log/clamd # Make the run files executable: chmod 755 /usr/local/clamav/supervise/clamd/run chmod 755 /usr/local/clamav/supervise/clamd/log/run # Then set up the log directories: mkdir -p /var/log/clamd chown qmailq /var/log/clamd # Finally, link the supervise directory into /service: ln -s /usr/local/clamav/supervise/clamd /service # ***************************************************************** # Note: The clamd script will start automatically shortly # after these links are created. If you don't want it running # yet, do the following: # ***************************************************************** clamdctl stop