Difference between revisions of "HowTos/AdminScripts"
(→reset the imap-cache for a mailbox) |
(→reset the imap-cache for a mailbox) |
||
Line 27: | Line 27: | ||
== reset the imap-cache for a mailbox == | == reset the imap-cache for a mailbox == | ||
− | A logical follow-up from the script above. | + | A logical follow-up from the script above. Scalix 11 only. |
− | + | Sometimes it might be necessary to reset the imap-cache. | |
#!/bin/bash | #!/bin/bash | ||
Line 52: | Line 52: | ||
echo "removing $REALPATH$FOLDER/imap-cache ..." | echo "removing $REALPATH$FOLDER/imap-cache ..." | ||
rm -rf $REALPATH$FOLDER/imap-cache | rm -rf $REALPATH$FOLDER/imap-cache | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
fi | fi | ||
echo "unlocking mail-account ..." | echo "unlocking mail-account ..." |
Revision as of 12:02, 13 July 2008
Here are some scripts that aren't big enough for a own topic.
Contents
show the g-directory of a specific user
Sometimes we have to know the g-directory of a mailbox. If you don't want to deal with omshowu every time you can use this script:
if [ "$1" = "" ] then echo "usage: $0 username" exit 1 fi REALPATH=`/opt/scalix/bin/omrealpath "~/"` OMSHOWU=`/opt/scalix/bin/omshowu -n "$1" -f 2>/dev/null| grep "User Folder"` if [ $? -eq 0 ] then FOLDER=`echo $OMSHOWU | awk -F/ '{print $2 "/" $3 }' ` echo $REALPATH$FOLDER else echo "Can not find $1" fi
As we are using the command "omshowu", we can use the same syntax to specify the username.
You can try to use the script like this:
cd `name_of_script "Givenname Surname"`
reset the imap-cache for a mailbox
A logical follow-up from the script above. Scalix 11 only. Sometimes it might be necessary to reset the imap-cache.
#!/bin/bash if [ "$1" = "" ] then echo "usage: $0 username" exit 1 fi REALPATH=`/opt/scalix/bin/omrealpath "~/"` OMSHOWU=`/opt/scalix/bin/omshowu -n "$1" -f 2>/dev/null| grep "User Folder"` if [ $? -eq 0 ] then FOLDER=`echo $OMSHOWU | awk -F/ '{print $2 "/" $3 }' ` ID=`/opt/scalix/bin/omshowu -n "$1" | grep "System Login :" | awk -F: '{print $2}' ` echo -n "Do you really want to remove the imap-cache for $1 (y/N)" read DOIT if [ "$DOIT" = "y" ] then echo "locking mail-account ..." /opt/scalix/bin/ommodu -o "$1" -K echo "killing IMAP-processes for user $1 (uid $ID) ..." pkill -u $ID in.imap41d echo "removing $REALPATH$FOLDER/imap-cache ..." rm -rf $REALPATH$FOLDER/imap-cache fi echo "unlocking mail-account ..." /opt/scalix/bin/ommodu -o "$1" -k echo "done!" fi else echo "Can not find $1" fi
script to fill mailboxes
if you have any reason to need a full mailbox, for example to test a backup system, this script can deliver.
#!/bin/bash #fillbox.sh #cmeid, jan07 #global varz #these must be changed fromUser=tester fromPass=password toUser=cmeid #if you want to use carbon copy and/or bcc, be sure to uncomment the appropriate lines below #copyUser= #bccUser= #these should be acceptable defaults dataFile=rawdatafile dataSize=15k subject="Test Mail" bodyFile=rawbodyfile bodySize=1k messageCount=1000 displayIncrement=50 #no sanity checking. only for use on trusted systems!!! #init attachments/bodymessages if [ ${bodySize} != 0 ]; then dd bs=${bodySize} count=1 if=/dev/urandom of=${bodyFile}.tmp &>/dev/null cat ${bodyFile}.tmp | uuencode -m ${bodyFile} > ${bodyFile} rm ${bodyFile}.tmp fi if [ ${dataSize} != 0 ]; then dd bs=${dataSize} count=1 if=/dev/urandom of=${dataFile} &>/dev/null fi #set up looping, go get a coffee and have a smoke i=1 echo "" echo -n Sending email ... until [ ${i} -gt ${messageCount} ]; do if [ ${dataSize} = 0 ] ; then # omsend -q -u ${fromUser} -p ${fromPass} -s "${subject} ${i} from ${fromUser} body size ${bodySize}" -t ${toUser} -c ${copyUser} -b ${bccUser} -a ${bodyFile} omsend -q -u ${fromUser} -p ${fromPass} -s "${subject} ${i} from ${fromUser} body size ${bodySize}" -t ${toUser} -a ${bodyFile} else # omsend -q -u ${fromUser} -p ${fromPass} -s "${subject} ${i} from ${fromUser} bodysize ${bodySize}i datasize ${dataSize}" -t ${toUser} -c ${copyUser} -b ${bccUser} -a ${bodyFile} -r ${dataFile} omsend -q -u ${fromUser} -p ${fromPass} -s "${subject} ${i} from ${fromUser} bodysize ${bodySize}i datasize ${dataSize}" -t ${toUser} -a ${bodyFile} -r ${dataFile} fi let i+=1 remainder=`expr ${i} % ${displayIncrement}` if [ $remainder = 0 ]; then echo "" echo -n ${i} email sent. else echo -n . fi done echo "" echo Total `expr ${i} - 1` mails sent echo $i echo "" exit 0
script to genererate login statistics
this script will parse your audit logs and generate a nicely formatted breakdown of the logins on your system.
you'll need to set up auditing on the appropriate services, check out omshowaud and omconfaud to do that.
#!/bin/bash #logonstat.sh #cmeid, 20070514 source /opt/scalix/global/config export today=`date "+%a %b %d"` #export today="Sun May 13" declare -a times logons users for i in 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23; do #for i in 00 01; do j=$(expr $i + 0) times[$j]=$i logons[$j]=`grep -A1 user-signon $OMDATADIR/logs/audit | grep "$today $i" | wc -l` users[$j]=`grep -A6 user-signon $OMDATADIR/logs/audit | grep -A4 "$today $i"| grep user\ |awk '{print $((NF-1))}'|sort|uniq -c|wc -l` done tLogons=`grep -A1 user-signon $OMDATADIR/logs/audit | grep "$today" | wc -l` tUsers=`grep -A6 user-signon $OMDATADIR/logs/audit | grep -A4 "$today"| grep user\ |awk '{print $((NF-1))}'|sort|uniq -c|wc -l` function printemptycell() { printf '|---------------' } function printcontent() { printf '|'" "${times[$1]}-${times[$(($1+1))]}"\t" printf '|'" "${users[$1]}"\t" printf '|'" "${logons[$1]}"\t" } function printtotals() { printf '|'" "00-24"\t" printf '|'" "$tUsers"\t" printf '|'" "$tLogons"\t" } function printdiv() { printf '|'"\n" i=1 while [ $i -le 3 ]; do printemptycell let "i+=1" done printf '|'"\n" } function printheader() { printf '| '"$@\t" } function printborder() { printf '|-----------------------------------------------|'"\n" } printf "\n" printborder printheader "Scalix Server `hostname --fqdn` Logins" printdiv printheader "Hour period" printheader "Total Unique" printheader "Total Logons" printf '|'"\n" printheader "Between" printheader "Users Seen" printheader "Handled" printdiv printtotals k=1 while [ $k -lt ${#times[@]} ]; do printdiv printcontent $k let "k+=1" done printf '|'"\n" printborder
and this is what it generates, isn't that cute? it took much longer to get the printf stuff together than the script itself...
|-----------------------------------------------| | Scalix Server scalix.your-server.de Logins | |---------------|---------------|---------------| | Hour period | Total Unique | Total Logons | | Between | Users Seen | Handled | |---------------|---------------|---------------| | 00-24 | 1072 | 20478 | |---------------|---------------|---------------| | 01-02 | 0 | 0 | |---------------|---------------|---------------| | 02-03 | 0 | 0 | |---------------|---------------|---------------| | 03-04 | 32 | 74 | |---------------|---------------|---------------| | 04-05 | 32 | 156 | |---------------|---------------|---------------| | 05-06 | 32 | 336 | |---------------|---------------|---------------| | 06-07 | 61 | 713 | |---------------|---------------|---------------| | 07-08 | 183 | 836 | |---------------|---------------|---------------| | 08-09 | 180 | 529 | |---------------|---------------|---------------| | 09-10 | 220 | 729 | |---------------|---------------|---------------| | 10-11 | 202 | 689 | |---------------|---------------|---------------| | 11-12 | 404 | 1421 | |---------------|---------------|---------------| | 12-13 | 502 | 2226 | |---------------|---------------|---------------| | 13-14 | 466 | 2150 | |---------------|---------------|---------------| | 14-15 | 468 | 2673 | |---------------|---------------|---------------| | 15-16 | 376 | 2132 | |---------------|---------------|---------------| | 16-17 | 202 | 1305 | |---------------|---------------|---------------| | 17-18 | 95 | 877 | |---------------|---------------|---------------| | 18-19 | 67 | 800 | |---------------|---------------|---------------| | 19-20 | 74 | 789 | |---------------|---------------|---------------| | 20-21 | 56 | 737 | |---------------|---------------|---------------| | 21-22 | 46 | 697 | |---------------|---------------|---------------| | 22-23 | 44 | 609 | |---------------|---------------|---------------| | 23- | 0 | 0 | |-----------------------------------------------|
scripts to show queue state
these are very simple scripts to programatically retrieve statistics on queue status. i like to build them into monitoring scripts and pipe them to mail.
You may want to tackegrep -v '0 0 0|Special queues'on the end, or build it into the sed replacement-strings, to remove output relating to empty queues.
#!/bin/bash date echo -e "A$((`date +%d|sed -e's/^0//g'`+10))E\ns"|omqdump 2>/dev/null|sed -e '1,/Quit/ d' -e 's/Option?//g' -e 's/Done//g'|tr -s "\n"
#!/bin/bash date echo -e "A$((`date +%d|sed -e's/^0//g'`+10))E\nT"|omqdump 2>/dev/null|sed -e '1,/Quit/ d' -e 's/Option?//g' -e 's/Done//g'|tr -s "\n"
Example output (without egrep) as follows:
QUEUE Messages Active Ever Load [1min,5min,15min] ARCHERR 0 0 0 0.00 0.00 0.00 ARCHIVE 0 0 0 0.00 0.00 0.00 BB 0 0 0 0.00 0.00 0.00 DIRSYNC 0 0 0 0.00 0.00 0.00 DMM 0 0 0 0.00 0.00 0.00 DUMP 0 0 0 0.00 0.00 0.00 ERRMGR 0 0 0 0.00 0.00 0.00 ERROR 0 0 0 0.00 0.00 0.00 LICENSE 0 0 0 0.00 0.00 0.00 LOCAL 0 0 226 0.00 0.00 0.00 PRINT 0 0 0 0.00 0.00 0.00 REQ 0 0 0 0.00 0.00 0.00 RESOLVE 0 0 0 0.00 0.00 0.00 ROUTER 0 0 226 0.00 0.00 0.00 SMERR 0 0 0 0.00 0.00 0.00 SMINTFC 0 0 0 0.00 0.00 0.00 TEST 0 0 0 0.00 0.00 0.00 UNIX 0 0 0 0.00 0.00 0.00 Special queues. IDEL 0 0 257 0.00 0.00 0.00 POISON 0 0 0 0.00 0.00 0.00
script to notify users on soon-expire password
Version: Scalix 11.0.2
OS: SLES 10
Users don't get notified on password expiration, if they use IMAP clients (Thunderbird, etc). Script is designed for daily cron job to scan Scalix server for the flagged accounts (ones that are near password expiration)
#!/bin/bash # Log file to be emailed to SYSADMIN LOG=<logfile> WARNTEXT=<bodyofthewarningmessage> EMAILSERVER=<servername> SXADMIN=<sxadmin@google.com> SYSADMIN=<sysadmin@google.com> echo "---Password expiration warning-----------" | tee $LOG echo "---user name------email address----------" | tee -a $LOG omshowu -e -m $EMAILSERVER | while read expiredAccount do userName=`echo $expiredAccount | cut -d"=" -f 2` >> $LOG 2>&1 userAddress=`omshowu -n "$userName" | grep Address | sed 's/ *(.*)//; s/>.*//; s/.*[:<] *//'` >> $LOG 2>& 1 if [[ "$userAddress" == *@* ]] then env MAILRC=/dev/null from="$SXADMIN" \ nail -n -s "Password expiration warning for your Scalix account" \ $userAddress < "$WARNTEXT" >> $LOG 2>&1 echo "$userName $userAddress ** User notified, email sent" | tee -a $LOG else echo "$userName $userAddress ** WARN: Not valid email address" | tee -a $LOG fi done env MAILRC=/dev/null from="$SXADMIN" \ nail -n -s "Scalix accounts with expired password" \ "$SYSADMIN" < $LOG