#!/bin/sh # mail.info.sh # Local version: 0.9.4 # Copyright (c) 2008 Peter Kuyarov, All rights reserved # Mon Mar 3 08:41:44 MST 2008 # # Goes through all email accounts under vpopmail, and shows info. # if 'email' argument is passed, will send email to root # otherwise will just scroll on screen # # scripts@pknet.net # http://peterk.org/scripts/ # PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin/:/usr/local/vpopmail/bin/ export PATH # file to store raw output in rawdata=/tmp/mail.info.raw data=/tmp/mail.info #email stats out sendmail() { mail -s "mail.info.sh 0.9.2 - now with some sorted statistics" \ root < $data } # pull all stats into $rawdata makelist() { echo "`date` - Script start time" echo cd /usr/local/vpopmail/domains && \ for i in `ls |grep -v dir-control|grep -v DEFA ` do echo '******************************************' echo '******************************************' echo $i | tr '[a-z]' '[A-Z]' for a in `ls $i/.qmail-*|grep -v .qmail-default` do echo Alias: `echo $a | sed s/$i\\\/.qmail-//`@$i = \ `cat $a | sed s/\&//` done echo '------------------------------------------' for d in `ls $i|grep -v qmail-|grep -v vpasswd|grep -v dir-control | \ grep -v qmailadmin|grep -v postmaster` do echo $d@$i vuserinfo $d@$i|grep -A 2 usage:|grep -v ip | \ grep -v created |grep -v 'last auth' lastlog=`vuserinfo -l ${d}@${i}|grep 'last auth: ' | \ sed 's/last auth: //g'` echo "Last login: $lastlog ${d}@${i}" echo "Disk Usage: `du -hd0 $i/$d|sed "s/ .*/ ${d}@${i}/g"`" # vuserinfo ${d}@${i} echo --------------------------------------- done done } diskusage() { echo "Top 15 maildir sizes:" grep 'Disk Usage:' $rawdata | egrep "M|G"|sed 's/Disk Usage: //g' | \ sort -rng |head -15 echo '******************************' } nologin() { echo "Users that have not logged in past 30+ days;" grep 'Never logged in' $rawdata | sed 's/Last login: //g' grep 'Last login: ' $rawdata | sed 's/Last login: //g' | \ grep -v 'Never logged in' | while read a b d T Y ALL; do diff=$((`date "+%s"` - `date -j -f "%a %b %d %T %Y" "$a $b $d $T $Y" "+%s"`)) # if diff is more than 30 days in seconds; if [ $diff -gt 2592000 ] then printf "$Y $b $d $T $a \t$ALL\n"; fi done } # make raw list/vuserinfo output; makelist > $rawdata # put headers into final $data file - date/time of run head -1 $rawdata > $data # top disk usage diskusage >> $data # nologin nologin |sort -g >> $data #everything else echo >> $data grep -v 'Script start time' $rawdata >> $data echo "`date` - Script end time" >> $data # if this should be emailed or not; if [ $# -gt 0 ] && [ $1='email' ] then sendmail else echo " $0 sendmail - to email statistics out" echo '' more $data fi rm $rawdata $data