One of our client needed to enable DNS cluster for his web servers. Before enabling cluster we have to make sure there are no duplicate accounts in the server. In many cases, accounts were migrated across the servers and the previous ones were not deleted. So, when enabling the cluster, the DNS of the first synced server will be saved in Cluster, thus causing the website to point to the wrong server. Our requirement was to find all the duplicate accounts.
Pre-Requisites:
- Create a directory named Servers and copy /etc/userdomains of all the servers are to be copied and saved to a file with name as its hostname. Eg: File server1.example.com contains the userdomains of the server server1.example.com.
- All the IPs on the servers has rdns setup to with respective hostname.
If rdns is not set as the hostnames, the script will need to be modified to read IP and server mapping from another file.
Once the server list is added, the directory structure should look like the picture below: Here, dupdomain.sh is the name of the script.

Script Execution:
After all the servers are added, execute the script using /bin/sh dupdomain.sh. The script may take a few minutes to complete to execute, depending on the number of domains present. When the script has completed execution the output will be saved to a CSV file Duplicate_Domains.csv
CSV file contains the list of accounts which are multiple servers, along with the list of servers having the duplicate accounts. An example of the output file is shown below:

#!/bin/bash
#Date: 20190215
#Script to read list of domains in multiple cpanel server and find duplicates and show where the domain is actually pointed to.
ServerList=Servers #Copy the userdomains file to this path
echo "Domain,Duplicates,Original" > Output.csv
echo "" > Common.txt
for i in `ls -1 $ServerList | grep -v "'"`
do
awk '{print $1}' $ServerList/$i | rev |cut -c2-| rev > $ServerList/$i.tmp #Cut only the domain names from userdomains
done
for i in `ls -1 $ServerList | grep -v "'" | grep tmp` #loop the Serverlist
do
#echo $i
for j in `cat $ServerList/$i` #loop the domains
do
#echo $j
#Find domains in multiple servers
DUPWC=$(grep -w ^$j $ServerList/*.tmp | grep -v $i | cut -f1 -d ":"| wc -l) #check if found in multiple files
GRP=$(grep -c $j Common.txt)
if [ $GRP -gt 0 ]; #This is to remove duplicate check
then
:
else
while [ $DUPWC -gt 0 ]
do
echo "$j" >> Common.txt
IP=$(dig +short $j) #Original IP
RDNS=$(dig -x $IP +short | head -1 | rev| cut -c2- | rev) #Hostname
DUP=$(grep -w ^$j $ServerList/*.tmp | cut -f1 -d ":"| cut -c9- | rev | cut -c5- | rev | grep -v $RDNS )
echo $j, $DUP, $RDNS >> Output.csv
break
done
fi
done
done
rm -f $ServerList/*.tmp
#rm -f Common.txt




