昨天檢查郵件服務器的時候發現一個大問題,原來部份已經刪除的用戶的郵件目錄並沒有被刪除,檢查了extman的設置,確認同時刪除用戶目錄已經check了,但是還是不成功,我估計是因爲我沒有執行suexec的原因,導致沒有成功刪除。現自已寫一個腳本,放到crontab中,每週運行一次。或手動運行
現需要寫一個腳本,根據用戶目錄清單對比mysql中的用戶找到存在目錄,但不存在用戶的數據。因此得出如下結論:
目錄的集合肯定是大於用戶集合,因此只找目錄集合在用戶集合中不存在的數據即可。
- #!/bin/sh
- #########################################333
- #
- #檢查已經刪除的郵件用戶的郵件存儲目錄是否已經刪除
- #通過對比郵件數據保存目錄列表和mysql用戶表數據對比
- #標記爲‘是’的目錄將會被移動到第二個參數指定的目錄
- #
- if [ "$#" -ne 2 ]; then
- echo Usage: $0 mysqlPasswordOfRoot DestFolderOfBackup
- exit 1;
- fi
- # SQL
- sqluser=root #mysql查詢登錄的用戶
- sqlPasswd=$1 #mySQL密碼
- # 執行查詢用戶並保存在sqlUsers數組中
- sqlUsers=$(echo 'select username from extmail.mailbox;' | mysql -u$sqluser -p$sqlPasswd |awk -F'@' 'NR>=2 { {print $1}}')
- #sqlUsers=$(mysql -uroot -p$sqlPasswd -e "select username from extmail.mailbox;")
- basedir="/data/mail/domain.com" #郵件保存目錄的父目錄
- userMailbox=$(ls -k $basedir|awk '{print $1}') #生成目錄列表數組
- # 源目錄
- if [ ! -d $basedir ]; then
- echo $basedir does not Exist, please check.
- exit 1
- fi
- # 備份目錄
- sourseDir=$basedir
- destDir=$2
- if [ ! -d $destDir ]; then
- echo $destDir does not exist,please create.
- exit 1
- fi
- #export isDirExist
- #
- #雙重循環對比兩個數組,如果目錄名稱在SQL數據庫中找到這置isDirExist的值爲1x,否則爲值0x.
- #
- for dir in $userMailbox
- do
- isDirExist="0x"
- for user in $sqlUsers
- do
- if [ "$dir" = "$user" ]; then
- isDirExist="1x"
- break
- fi
- done
- if [ "$isDirExist" = "0x" ]; then
- # echo $isDirExist":"$dir
- echo "mv $basedir/$dir $destDir"
- # mv $basedir/$dir $destDir
- fi
- done