Shell script to backup a Mysql database and save it on a remote server using Ftp

Posted by admin     Category: Scripts

The following shell script will dump the mysql database and will save the .sql file on a remote location using Ftp. This script will create a backup file including the current date so you can have multiple copies of the backups of the same database under one directory.

Create a file called mysqlbkup.sh

# vi /root/mysqlbkup.sh

and paste the following code in the file as it is.

##############START OF THE SCRIPT##############
#!/bin/bash
# Specify the temporary backup directory
BKUPDIR="/tmp"
# Database Name
dbname="dbname_here"
# store the current date
date=`date '+%Y-%m-%d'`
# Specify Ftp details
ftpserver="FtpServerIP"
ftpuser="username"
ftppass="password"
# Dump the mysql database with the current date and compress it.
#Save the mysql password in a file and specify the path below
/usr/bin/mysqldump -uroot -p`cat /path/to/passfile` $dbname | gzip > $BKUPDIR/$date.$dbname.sql.gz
# Change directory to the backup directory
cd $BKUPDIR
# Upload the backup
ftp -n $ftpserver <<!EOF!
user $ftpuser $ftppass
binary
prompt
mput *.sql.gz
quit
!EOF!
# Remove the local backup file
/bin/rm -f /$BKUPDIR/$date.$dbname.sql.gz
##############END OF THE SCRIPT##############

Save the file and schedule a cronjob to execute the file on daily basis, say during night hours at 1.00AM. Edit the cron file

# crontab -e

and set the following cronjob

0  1  *  *  *  /bin/sh /root/mysqlbkup.sh

save the file and restart the crond service

# service crond service

The script will work on a Linux/Plesk server as well. You just have to replace the mysqldump line in the script with the following

/usr/bin/mysqldump -uadmin -p`cat /etc/psa/.psa.shadow` $dbname | gzip > $BKUPDIR/$date.$dbname.sql.gz

Make sure you assign the db_name, ftpserver/user/pass values properly at the start of the script.

Note: Leave a comment if you have any suggestions, questions OR have received any error message using this script.

Shell Script to Monitor Load Average on a Linux server

Posted by admin     Category: Scripts

Load Average on a server reflects the current state of the server. Higher the load average, poorer is the server performance hence it is a necessity to monitor the load average on the server. The following shell script monitors the load average on the Linux server and inform the server administrator with the current running processes of the server if the load average is greater than the defined threshold.

Create a file, say, /root/monit_loadaverage.sh and paste the following script in it:

############### START OF THE SCRIPT ###############
#!/bin/bash
# Define Variables
CUR_TIME=`date +"%A %b %e %r"`
HOSTNAME=`hostname`
# Retrieve the load average of the past 1 minute
Load_AVG=`uptime | cut -d'l' -f2 | awk '{print $3}' | cut -d. -f1`
LOAD_CUR=`uptime | cut -d'l' -f2 | awk '{print $3 " " $4 " " $5}' | sed 's/,//'`
# Define Threshold. This value will be compared with the current load average.
# Set the value as per your wish.
LIMIT=5
# Compare the current load average with the Threshold and
# email the server administrator if the current load average is greater.
if [ $Load_AVG -gt $LIMIT ]
then
#Save the current running processes in a file
/bin/ps -auxf >> /root/ps_output
echo "Current Time :: $CUR_TIME" >> /tmp/monitload.txt
echo "Current Load Average :: $LOAD_CUR" >> /tmp/monitload.txt
echo "The list of current processes is attached with the email for your reference." >> /tmp/monitload.txt
echo "Please Check... ASAP."  >> /tmp/monitload.txt
# Send an email to the administrator of the server
/usr/bin/mutt -s "ALERT!!! High 1 minute load average on '$HOSTNAME'" -a /root/ps_output youremail@yourdomain.tld < /tmp/monitload.txt
fi
# Remove the temporary log files
/bin/rm -f /tmp/monitload.txt
/bin/rm -f /root/ps_output
############### END OF THE SCRIPT ###############

Now, schedule a cronjob to execute the script on per minute basis. Edit the cronjob file

# crontab -e

and place the following cronjob at the end of the file

* * * * * /bin/sh /root/monit_loadaverage.sh

restart the crond service

# service crond restart

In order to use “mutt” to send emails, you need to install the mutt package on the server. It allows you to send emails with attachments.

# yum install mutt

Note: Please place a comment if you receive any error message while executing this script OR you need some modifications in the script.

Script to terminate suspended accounts on a cPanel server

Posted by admin     Category: Scripts

How to check suspended accounts on a cPanel server and terminate them after a specific time frame?

Many a times you suspend an account on the server and it goes unnoticed for months thus wasting disk space of your server. You can use the following script and schedule it to execute, say once in a day which will delete the suspended accounts from the server.

Create a file called terminatesuspended.sh

pico /root/terminatesuspended.sh

Add the following code

for i in `find /var/cpanel/suspended/ -mtime +30 | cut -d’/’ -f5 | sed ’1 d’`
do
y | /scripts/killacct $i;
done;

The suspended accounts username are saved under the /var/cpanel/suspended directory. The find command will search files under the /var/cpanel/suspended/ directory which are 30 days old and will pass the username to the ‘killacct’ command.

Save the file and set a cronjob to execute the file once in a day. Edit the root cronjob file

crontab -e

Add the following cronjob

0 1 * * * /bin/sh /root/terminatesuspended.sh

The above cronjob will terminate the account that is been suspended from more than 30 days at 1.00AM.

Script to email successful Ftp logins

Posted by admin     Category: Scripts

Shell Script to email Successful Ftp Logins.

This Shell script will search the server logs on daily basis and will email you the successful Ftp Logins of the day. The ftp logs are saved in the /var/log/messages file as by default there is no separate log file for Ftp in Linux.

Create a file /home/script/ftplogins.sh and paste the below code:

#!/bin/bash

#Retrieve the current date

CUR_DATE=`date +”%b %e”`

#Create a temporary file to store the logs
touch /tmp/out.txt

echo “List Follows” > /tmp/out.txt

#Search the successful attempts and save in the temporary file

/bin/grep “$CUR_DATE” /var/log/messages | grep pure-ftpd | grep logged >> /tmp/out.txt

#Email the contents of the file to your email address
/bin/mail -s “Successful Ftp Login Attempts on ‘$CUR_DATE’” youremail@yourdomain.com < /tmp/out.txt

Save the file. You now have to schedule a cron to execute the file once in a day to search logs. Edit the cron file

crontab -e

and add the following cron job

59 23 * * * /bin/sh /home/script/ftplogins.sh

Note:

1) This script will work with Pure-Ftpd server. You will have to edit the search string a bit according to your Ftp server.

2) If you copy/paste the script as it is in shell, the single and double quotes may change to dots (.) so make sure you correct them before executing the script.

Script to email failed Ftp login attempts

Posted by admin     Category: Scripts

Shell Script to search Failed Ftp Login Attempts

This Shell script will search the server logs on daily basis and will email you the Failed Ftp Login Attempts of the day. The ftp logs are saved in the /var/log/messages file as by default there is no separate log file for Ftp in Linux.

Create a file /home/script/failedftp.sh and paste the below code:

#!/bin/bash

#Retrieve the current date

CUR_DATE=`date +”%b %e”`

#Create a temporary file to store the logs
touch /tmp/out.txt

echo “List Follows” > /tmp/out.txt

#Search the failed attempts and save in the temporary file

/bin/grep “$CUR_DATE” /var/log/messages | grep pure-ftpd | grep failed >> /tmp/out.txt

#Email the contents of the file to your email address
/bin/mail -s “Failed Ftp Login Attempts on ‘$CUR_DATE’ ” youremail@yourdomain.com < /tmp/out.txt

Save the file. You now have to schedule a cron to execute the file once in a day to search logs. Edit the cron file

crontab -e

and add the following cron job

59 23 * * * /bin/sh /home/script/failedftp.sh

Note:

1) This script will work with Pure-Ftpd server. You will have to edit the search string a bit according to your Ftp server.

2) If you copy/paste the script as it is in shell, the single and double quotes may change to dots (.) so make sure you correct them before executing the script.