Being pretty much a new guy to the SA scene, I think I can help you
understand which does what...

SpamAssassin is the actual processing program.  When run directly as
"spamassassin" it needs to load a PERL processor (the scripting language
it's written in), runs, and then unloads from memory when done.  This is
fine for many applications, but when you need to check a lot of email (like
many of us that host email accounts for customers) that translates into a
very slow process as you have to wait for the whole load, execute, unload
process to run.  You also must run "spamassassin" on the machine that has
the email to be scanned.

"spamd" is a "daemon" (the "d" in spamd) or service.  It is a copy of
"spamassassin" that is loaded ahead of time (usually during the computer's
boot up), and not unloaded.  So initially, you may have 5 copies (also
called children) of spamd running (5 copies of spamassassin) which is a
quick hit on resources, but from there on it is MUCH faster as it doesn't
ever need to unload and reload again for each message it needs to process.
It is always ready and waiting... plus it has code to allow it to talk to
another server that has the email that needs processing... which brings me
to...

"spamc" is a "client" (the "c" in spamc).  It is very small, so it loads
very quickly as all it has to do is simply pass the message that needs
processing/checking to the server that is running spamd and then wait for a
response from spamd on what it found.

Now, you don't need two computers to use spamc/spamd.  Many run it on the
same computer because it is faster than running spamassassin as it is always
ready to run (no load/unload waiting).

Recap:
======
SpamAssassin: Processing program.  It loads, processes, and unloads.
SpamD: It is SpamAssassin, but doesn't unload, so it is always ready.  It
listens for a communication from SpamC (on same or different computer).
SpamC: It passes a message to be processed to SpamD (on same or different
computer).

So what you really want to do is get SpamD running with a line like:

spamd -i 0.0.0.0 -A 192.168/16,127.0.0.1

the -i tells spamd to listen on all IPs available (in case the computer has
more than 1 IP)
the -A tells spamd to accept SpamC connections from the following IP/IP
blocks - in my case 192.168.x.x (any computer on my private network - I have
3 servers using SpamC to talk to it) and 127.0.0.1 (itself)

By default spamd in spamassassin 3.x will run 5 children (5 copies of
spamassassin)... which will require a 512MB machine.  You can add a "-m 3"
to make it have 3 children if you have only 256MB.

You call spamc with a line like:

spamc -d 192.168.0.13 <messagetotest >messageresults

the -d 192.168.0.12 tells spamc that the spamd is running on the computer at
IP 192.168.0.13... the default is 127.0.0.1, so you don't need this bit if
you wanted it to talk to spamd running on the same PC.

I hope this helps you and others out.

Oh, and you "wise and knowledgeable" devs and users... feel free to correct
me if I'm wrong about anything.
------------------------------------------------------------
Jason J Ellingson
Technical Consultant

615.301.1682 : nashville
612.605.1132 : minneapolis

www.ellingson.com
[EMAIL PROTECTED]

-----Original Message-----
From: John Fleming [mailto:[EMAIL PROTECTED] 
Sent: Sunday, October 31, 2004 3:21 PM
To: users@spamassassin.apache.org
Subject: Re: Load Average Problems

OK, I'll bare my ignorance here in hopes of enlightenment.  I'm probably
lucky that I have SA working as well as I do.  I only have a loose
understanding of the different roles of "spamassassin", "spamc", and
"spamd".  I start things with /etc/init.d/spamassassin.  Then in procmail, I
pipe the msg to spamc.  In neither of these places do I see how to pass any
options to spamd.

I've also tried:
# spamd -m 2
but this gets an error about the socket being in use.

What am I missing?  - John




Reply via email to