Scripts

From My Wiki
Revision as of 09:54, 14 March 2017 by Meadmin (talk | contribs)

Jump to: navigation, search

Flying replication

rsync -avz 192.168.1.122:/usr/local/apache/conf/ /usr/local/apache/conf/ --delete
rsync -avz 192.168.1.122:/var/named/ /var/named/ --delete
rsync -avz 192.168.1.122:/usr/local/cpanel/ /usr/local/cpanel/ --delete
rsync -avz 192.168.1.122:/var/cpanel/ /var/cpanel --delete

for x in `cat /etc/trueuserowners|grep -v "#"|cut -d: -f1`;do /usr/local/cpanel/bin/setsiteip -u $x `hostname -i` ;done;  

/scripts/rebuildhttpdconf


WHM replication to clean server

#!/bin/bash
rsync -avz 172.18.0.2:/etc/apache2/conf/ /etc/httpd/conf/
rsync -avz 172.18.0.2:/var/cpanel/ssl/installed/ /etc/ssl/certs/
rsync -avz 172.18.0.2:/etc/apache2/conf.d/includes/ /etc/httpd/conf.d/includes/
rsync -avz 172.18.0.2:/var/cpanel/ssl/cpanel/ /etc/ssl/certs/cpanel/
sed -i "s/172.18.0.2/`hostname -i`/g" /etc/httpd/conf/httpd.conf
sed -i "s/\/var\/cpanel\/ssl\/installed\//\/etc\/ssl\/certs\//g" /etc/httpd/conf/httpd.conf
sed -i "s/\/etc\/apache2\//\/etc\/httpd\//g" /etc/httpd/conf/httpd.conf
sed -i "s/RewriteMap LeechProtect/\#RewriteMap LeechProtect/g" /etc/httpd/conf/httpd.conf
sed -i "s/Mutex file:\/run\/apache2/\#Mutex file:\/run\/apache2/g" /etc/httpd/conf/httpd.conf
sed -i "s/apache2/httpd/g" /etc/httpd/conf/httpd.conf
sed -i "s/\/var\/cpanel\/ssl\/cpanel\//\/etc\/ssl\/certs\/cpanel\//g" /etc/httpd/conf/httpd.conf


WHM replicate suphp to clean server

scp /usr/lib64/httpd/modules/mod_suphp.so 172.18.0.6:/usr/lib64/httpd/modules/
scp /etc/httpd/conf.modules.d/90-suphp.conf 172.18.0.6:/etc/httpd/conf.modules.d/
scp /usr/lib64/httpd/modules/mod_suphp.so 172.18.0.6:/usr/lib64/httpd/modules/
scp /usr/sbin/suphp 172.18.0.6:/usr/sbin/
scp /etc/suphp.conf 172.18.0.6:/etc/
scp /etc/httpd/conf.d/php.conf 172.18.0.6:/etc/httpd/conf.d/
scp /etc/httpd/conf.modules.d/10-php.conf 172.18.0.6:/etc/httpd/conf.modules.d/

chown root.nobody /usr/sbin/suphp
chmod 4750 /usr/sbin/suphp


Sync nginx conf

#!/bin/bash

servs=(192.168.0.11 192.168.0.12 192.168.0.15 192.168.0.16 192.168.0.17 192.168.0.19 192.168.0.20 192.168.0.21 192.168.0.22 192.168.0.23 192.168.0.24 192.168.0.26 192.168.0.115 192.168.0.116 192.168.0.117 192.168.0.118 192.168.0.29 192.168.0.30)

for i in "${servs[@]}"
do
       echo $i
       scp nginx_conf/nginx.conf $i:/etc/nginx/
       scp nginx_conf/.htpasswd $i:/etc/nginx/
       scp -r nginx_conf/conf.d $i:/etc/nginx/
       ssh $i 'sed -i "s/Lxxx/`echo L\`hostname|cut -d "-" -f1|sed "s/web//"\``/g" /etc/nginx/conf.d/* && service nginx restart'
done

Manage CWM auto start and stop server

#!/bin/bash
. keys.sh


minservs=4
maxservs=8
locon=2500
hicon=8000

servs=($serv_01 $serv_02 $serv_03 $serv_04 $serv_05 $serv_06 $serv_07 $serv_08)
onservs=0
conns=0
#echo ${servs[@]}

for i in "${servs[@]}"
do
       readarray -t values < <(curl -s -H "AuthClientId: ${clientId}" -H "AuthSecret: ${secret}" "https://console.cloudwm.com/service/server/${i}"|/root/api/jq -r '(map(values))[]') # | egrep "power|ip"
       #echo ${values[6]} ##power
       #echo ${values[14]} |sed 's/\"//g' ##ips
       if [ ${values[6]} == 'on' ]; then 
               #onservs=$((onservs+1))
               ((onservs++))
               ip=$(echo ${values[14]} |tr -d \"\'\",\") ##ips
               curcon=$(ssh $ip "netstat -ant | grep :80 | wc -l")
               #echo $ip , $curcon
               conns=$((conns+curcon))
       fi
       #declare -p values
done

#echo "On servers: " $onservs
#echo "Connections: " $conns

mid=$((conns/onservs))
#echo "mid: " $mid

if [[ $mid > $hicon ]] && [[ $onservs < $maxservs ]]; then   ## power on +1
       #echo "hi"
       srv=${servs[onservs]}
       #echo $srv
       curl -s -H "AuthClientId: ${clientId}" -H "AuthSecret: ${secret}" -X PUT -d "power=on" "https://console.cloudwm.com/service/server/${srv}/power"

elif [[ $mid < $locon ]] && [[ $onservs > $minservs ]]; then   ## power off -1
       #echo "lo" $onservs
       srv=${servs[onservs-1]}
       #echo $srv
       curl -s -H "AuthClientId: ${clientId}" -H "AuthSecret: ${secret}" -X PUT -d "power=off" "https://console.cloudwm.com/service/server/${srv}/power"
fi

SQL dump

#!/bin/bash

retain=7                                ## days to keep
logdir="/var/www/html/sqlbackups/"      ## dumps folder
prename="db_Backup"                     ## name prefix
postname=".sql.gz"                      ## name suffix
mailaddr="eitani@gmail.com"

dumpcmd="mysqldump --all-databases"
date=`date +"%d%b%y"`
tmst='date +%Y%m%d-%H%M%S.%N'
outstr="[`$tmst`]: Dump started\n"

fullname=$logdir$prename"_"$date$postname

if [ -z "$logdir" ]; then
       outstr=$outstr"[`$tmst`]: Log directory not set\n"
       out=1
else
       outstr=$outstr"[`$tmst`]: Running dump $dumpcmd | gzip -c > $fullname\n"
       $dumpcmd | gzip -c > $fullname
       out=$?
fi

if [[ $out = 0 ]]; then 
       outstr=$outstr"[`$tmst`]: Dump done, file: $fullname\n"
       outstr=$outstr"[`$tmst`]: Deleting old backups (older than $retain days) from folder: $logdir\n"
       outstr=$outstr"[`$tmst`]: Files to be deleted: `find $logdir -type f -mtime +$retain `\n"
       `find $logdir -type f -mtime +$retain -exec rm {} \;`
else
       outstr=$outstr"[`$tmst`]: Dump failed\n"
fi

outstr=$outstr"[`$tmst`]: Script done\n"

#echo -e $outstr

mailtxt="Subject: SQLdump on webbit server\nFrom: script@webbit.web\nTo: $mailaddr\n\n$outstr"
echo -e $mailtxt | sendmail -t


Check DNS zones

#!/bin/bash

iparr=()
ipbad=()

tempfile="/tmp/zonetempfile.db"
backupdir="/root/oldzones"

getzones () {
       zones=($(find /var/named/*.db -printf '%f\n'|sed 's/\.db//g'))
       #echo $zones
}

findoffs () {
       fl=$1
       a=()
       #echo "File: " $fl
       #cat $fl | while read line
       #do
       while read -r line
       do
               #echo "line: "$line
               if [[ "${line:0:1}" == ";" ]] &&  $line == *"IN A"*  ; then
                       addr=$(echo $line|awk '{print $4}')
                       #echo "adr:" $addr
                       checkip $addr
                       #echo done
                       changed+=($res)
               fi
       done < <(cat $fl)
       #done
}

checkip () {
       ipad=$1
       #echo $ipad
       if [[ "${iparr[@]}" =~ "i${ipad}i" ]]; then
       #if [[ "${iparr[@]}" == "${ipad}" ]]; then
               #echo "Found: " $ipad
               return 0
       elif [[ "${ipbad[@]}" =~ "i${ipad}i" ]]; then
               #echo "found bad: " $ipad
               return 1
       else
               #echo "Not found: " $ipad
               timeout 2 ping -c 1 $addr > /dev/null
               res=$?
               ii="i"$ipad"i"
               if  $res == 0 ; then
                       #echo $ii
                       #iparr+=($ipad)
                       iparr+=($ii)
                       #echo "add to good: "$ii
                       return 0
               else
                       ipbad+=($ii)
                       #echo "add to bad: "$ii ", old: "${ipbad[@]}
                       return 1
               fi
               #echo "no"
       fi
}

parsezone () {
       zone=$1
       #echo "Zone: " $zone
       fname="/var/named/$1.db"
       #echo "Name: " $fname
       parsed=($(named-checkzone -q -i none -s full -D $1 /var/named/$1.db | egrep "IN SOA|IN A"))
       #for i in `named-checkzone -q -i none -s full -D $1 /var/named/$1.db | egrep "IN SOA|IN A"`
       #do
       #       echo "u: " $i
       #done


       #echo "Parsed: " $parsed
       for i in ${parsed[@]}
       do
               #echo "z: " $zone "i: " $i
               if  $i == *"SOA"* ; then
                       ser=$(echo $i|awk '{print $7}')
                       #echo "Ser: " $ser
               elif  $i == *"IN A"* ; then
                       host=$(echo $i|awk '{print $1}')
                       addr=$(echo $i|awk '{print $5}')
                       #echo "Pinging: *"$addr"*"
                       #timeout 3 ping -c 1 $addr #> /dev/null
                       checkip $addr
                       res=$?
                       let changed+=($res)
                       if [[ $res > 0 ]]; then
                               toblock+=($addr)
                       fi
                       #echo "Host: " $host "Addr: " $addr "Res: " $res
               fi
       done
       #echo "Block: " $toblock
       #echo "Parsed: " ${parsed[@]}
       #sers=$(echo $parsed|grep SOA|awk '{print $7}')
       #sers=$(echo $parsed|grep SOA)
       #arec=$(echo $parsed|grep "IN A")
       #echo "ser: " $sers
       #echo ${arec[@]}
       #for i in "${arec[@]}"
       #do
       #       echo "As: " $i
       #done
}

updatezone () {
       uzone=$1
       zname=$2
       newser=$((ser+1))
       #echo "old ser" $ser
       #echo "new ser" $newser
       cp $zname /root/scripts/

       sed -i "s/$ser/$newser/" $zname   # update serial
       infile=$(cat $zname)
       #outfile="z.z"
       outfile=tempfile
       > $outfile
       #echo $infile
       for f1 in $infile
       do
               #echo " - "$f1
               newline=$f1
               if [[ "${f1:0:1}" == ";" ]] &&  $f1 == *"IN A"*  ; then
                       fip=$(echo $f1|awk '{print $4}')
                       #echo "add: "$fip
                       if ! [[ "${ipbad[@]}" =~ "i${fip}i" ]]; then
                               #echo "remove from bad" $fip
                               newline=$(echo $f1|sed -r 's/^.{1}//')
                               #echo "new: "$newline
                       fi
               elif  $f1 == *"IN A"*  ; then
                       fip=$(echo $f1|awk '{print $4}')
                       #echo "add: "$fip
                       if ! [[ "${iparr[@]}" =~ "i${fip}i" ]]; then
                               #echo "remove from good" $fip
                               newline=";"$f1
                               #echo "new: "$newline
                       fi
               fi
               echo $newline >> $outfile
       done
       cat $outfile > $zname
}

IFS='
'

#zone="eye-t.co.il"
getzones
#echo $zones

#if [ ! -d $backupdir ]; then
#       echo "nofolder"
#       mkdir $backupdir
#fi

curdate=$(date +"%Y%m%d-%H%M%S")

#echo $curdate

for zone in "${zones[@]}"
do
       changed=0
       toblock=()
       toallow=()
       parsezone $zone
       #echo $fname
       findoffs $fname
       #echo "change: " $changed
       #echo "good: " ${iparr[@]}
       #echo "bad: " ${ipbad[@]}
       if [[ $changed > 0 ]]; then
               if [ ! -d $backupdir/$curdate ]; then
                       mkdir $backupdir/$curdate -p
               fi
               echo "zone: " $zone "changed!!!"
               cp $fname $backupdir/$curdate/
               updatezone $zone $fname
       fi
done