mailwatcher is this script: #!/bin/bash # set -x # this was a test, was /bin/sh above, but /bin/sh is a softlink to /bin/dash # REQUIRES your distros inotify-tools package, assume kde/kmail in use # but might be adaptable to other agents too # requires a ~/log directory, so mkdir it before running it # you will also need to either do the housekeeping of this file, or # figure out how to make logrotate do it for you.
WatchDir=/var/spool/mail/
# Setup temporary log Log=mail.log # put it in my home dir like fetchmail and procmail Mlog=~/log # in case it doesn't exist, make it touch ${Mlog}/${Log} # the command to send over dbus/dcop to make kmail pull the mailfile #in /var/spool/mail
# First set method Method=dcop if [[ ${Method} = 'dbus' ]] then Cmd="/usr/bin/qdbus org.kde.kmail /KMail org.kde.kmail.kmail.checkMail" fi if [[ ${Method} = 'dcop' ]] then #or for dcop, use: Cmd="/opt/trinity/bin/dcop kmail KMailIface checkMail" fi
# Now, do forever while : do sleep 1 if [ $(pidof -s kmail) ] then echo -n "Kmail is running " >>${Mlog}/${Log} date -R >>${Mlog}/${Log} sleep 1 # delay to give kmail a chance to settle in # only start fetchmail once! if [ $(pidof -s fetchmail) ] then sleep 1 echo -n "fetchmail already running " >>${Mlog}/${Log} date -R >>${Mlog}/${Log}
else echo -n "starting fetchmail at " >>${Mlog}/${Log} /usr/local/bin/fetchmail --fetchmailrc /home/gene/.fetchmailrc >>${Mlog}/${Log} & date -R >>${Mlog}/${Log} fi sleep 1 # delay to give kmail a chance to get its dcop/dbus sockets setup? $cmd while [ $(pidof -s kmail) ] do # I've found that stderr needs dumped to /dev/null, so InMail=`/usr/bin/inotifywait -q -e close_write --format %f ${WatchDir}` # 2>&1 >/dev/null # and here it sits until inotifywait exits because of an incoming mail # and time later it will exit, setting $InMail to something, so # recheck to make sure kmail is still about before sending the signal # as dbus/dcop seems to get a tummy ache if there is no receiver
if test "${InMail}" = "gene" then $Cmd # sleep 1 # log it echo -n ${InMail} >>${Mlog}/${Log} echo -n " @ " >>${Mlog}/${Log} date -R >>${Mlog}/${Log} elif test "${InMail}" = "gene-from_linda" then $Cmd # sleep 1 # log it echo -n ${InMail} >>${Mlog}/${Log} echo -n " @ " >>${Mlog}/${Log} date -R >>${Mlog}/${Log} elif test "${InMail}" = "amanda" then $Cmd # sleep 1 # log it echo -n ${InMail} >>${Mlog}/${Log} echo -n " @ " >>${Mlog}/${Log} date -R >>${Mlog}/${Log} fi done # we don't have a pidof kmail, log that its gone echo -n "Kmails pid is missing - it has stopped ">>${Mlog}/${Log} date -R >>${Mlog}/${Log} # Now, kill fetchmail too, and this is ok to do killall fetchmail # get rid of a waiting inotifywait, but this is not inotifywait instance # sensitive and may kill the one for cocoprint. killall inotifywait fi # and should be back in the outer loop, waiting for a kmail PID done
but... its Apparentely not getting the dbus msg to kmail. and to me its magic so what do I check next?
dbus is running: root@coyote:/home/gene# ps -ea|grep dbus 696 ? 00:01:11 dbus-daemon 1768 ? 00:00:02 dbus-daemon 1975 ? 00:00:01 dbus-daemon 2955 pts/0 00:00:00 dbus-launch 2956 ? 00:00:00 dbus-daemon 13857 ? 00:00:00 dbus 13868 ? 00:00:00 dbus
thank you Steven, gene