昨天检查邮件服务器的时候发现一个大问题,原来部份已经删除的用户的邮件目录并没有被删除,检查了extman的设置,确认同时删除用户目录已经check了,但是还是不成功,我估计是因为我没有执行suexec的原因,导致没有成功删除。现自已写一个脚本,放到crontab中,每周运行一次。或手动运行

 现需要写一个脚本,根据用户目录清单对比mysql中的用户找到存在目录,但不存在用户的数据。因此得出如下结论:

目录的集合肯定是大于用户集合,因此只找目录集合在用户集合中不存在的数据即可。

 

 
  
  1. #!/bin/sh 
  2.  
  3. #########################################333 
  4. #检查已经删除的邮件用户的邮件存储目录是否已经删除 
  5. #通过对比邮件数据保存目录列表和mysql用户表数据对比 
  6. #标记为‘是’的目录将会被移动到第二个参数指定的目录 
  7.  
  8. if [ "$#" -ne 2  ]; then 
  9.        echo Usage: $0 mysqlPasswordOfRoot DestFolderOfBackup 
  10.         exit 1; 
  11. fi 
  12. #     SQL 
  13. sqluser=root #mysql查询登录的用户 
  14. sqlPasswd=$1 #mySQL密码 
  15.  
  16. #      执行查询用户并保存在sqlUsers数组中 
  17. sqlUsers=$(echo 'select username from extmail.mailbox;' | mysql -u$sqluser -p$sqlPasswd |awk -F'@' 'NR>=2 { {print $1}}'
  18. #sqlUsers=$(mysql -uroot -p$sqlPasswd -e "select username from extmail.mailbox;"
  19.  
  20.  
  21. basedir="/data/mail/domain.com" #邮件保存目录的父目录 
  22. userMailbox=$(ls -k $basedir|awk '{print $1}')   #生成目录列表数组 
  23.  
  24. #    源目录 
  25. if [ ! -d $basedir  ]; then 
  26.      echo $basedir does not Exist, please  check
  27.         exit 1 
  28. fi 
  29.  
  30. #    备份目录 
  31. sourseDir=$basedir 
  32. destDir=$2 
  33. if [ ! -d $destDir ]; then 
  34.    echo $destDir does not exist,please create
  35.    exit 1 
  36. fi 
  37.  
  38.  
  39. #export isDirExist 
  40. #双重循环对比两个数组,如果目录名称在SQL数据库中找到这置isDirExist的值为1x,否则为值0x. 
  41. for dir in $userMailbox 
  42. do 
  43.  
  44. isDirExist="0x" 
  45.         for user in $sqlUsers 
  46.         do 
  47.                 if [ "$dir" = "$user" ]; then 
  48.                         isDirExist="1x" 
  49.                         break 
  50.                 fi 
  51.         done 
  52.  
  53. if [  "$isDirExist" = "0x" ]; then 
  54. #       echo $isDirExist":"$dir 
  55.         echo "mv $basedir/$dir $destDir" 
  56. #        mv  $basedir/$dir $destDir 
  57. fi 
  58. done