== Linux Maintenance Scripts ==
== Services ==
==== BIND/DNS ====
''bind-restart.sh'':
#!/bin/bash
## script: ./bind-restart.sh
#/etc/init.d/bind stop
#/etc/init.d/bind start
/etc/init.d/bind9 restart
==== DHCP ====
''dhcpd-restart.sh'':
#!/bin/bash
## script: ./dhcpd-restart.sh
#service isc-dhcp-server stop
#service isc-dhcp-server start
service isc-dhcp-server restart
# Check status
ps aux | grep dhcpd
==== Windows Server Mapping ====
''map-win-backup-server.sh'':
#!/bin/bash
## script: ./map-win-backup-server.sh
## Mount and map Windows backup server (for backup purposes)
mount -t cifs -o username=backuponly,password=backup //backupserver2/LinuxBackup /data/win-fileserver/
==== RSync ====
''rsync-server.sh'':
#!/bin/bash
#rsync --verbose --progress --stats --compress --rsh=/usr/bin/ssh \
# --recursive --times --perms --links --delete \
# --exclude "*bak" --exclude "*~" \
# 192.168.0.31:webfiles /var/www/mirror
# Website
rsync --archive --verbose --progress --stats --rsh=/usr/bin/ssh --recursive --times --perms
--links --delete --exclude=stats 192.168.0.31::webfiles /data/mirror/swdev/www
# Databases
rsync --archive --verbose --progress --stats --rsh=/usr/bin/ssh --recursive --times --perms
--links --delete 192.168.0.31::databases /data/mirror/swdev/databases
# Root user home
rsync --archive --verbose --progress --stats --rsh=/usr/bin/ssh --recursive --times --perms
--links --delete 192.168.0.31::root /data/mirror/swdev/root
# Subserver Repositories
rsync --archive --verbose --progress --stats --rsh=/usr/bin/ssh --recursive --times --perms
--links --delete 192.168.0.31::repos /data/mirror/swdev/repos
== Anti-spam / Anti-crack ==
Run this script to scan the website and see signs of spamming or cracking: ''scan-website.sh'':
#!/bin/bash
## script: scan-website.sh
##
echo "Scan Website for vulnerabilities" > /tmp/scan.txt
cd /var/www
find . -name "*.php.suspected" >> /tmp/scan.txt
find . -name "*.php" -exec grep -H "eval(" "{}" \; >> /tmp/scan.txt
find . -name "*.php" -exec grep -H "\$GLOBALS.*\\x" "{}" \; >> /tmp/scan.txt
find . -name "*.php" -exec grep -H "function.*for.*strlen.*isset" "{}" \; >> /tmp/scan.txt
find . -name "*.php" -exec grep -H '
== Mail Spool Maintenance ==
Remove mail files of certain size (mailboxes that have spam and are not checked by users)
#!/bin/bash
x=''
for x in $( ls /var/spool/mail ); do
if [ $( stat -c %s /var/spool/mail/$x ) -gt 10000000 ]; then
echo $x >> names.log
# rm $x
fi
done
== Commonly Used ''sed'' Commands ==
=== Deleting Tabs with ''sed'' ===
To delete the rest of a line after the tab in command ''du'' (disk used), try one of the following commands:
Delete characters from the begining of line until the tab:
$ du | sed "s/^.*\t//"
Delete tabe from the end of the line:
$ du | sed "s/\t.*$//"
^Notation^^
| ''^'' | for beginning. |
| ''$'' | for end. |
| ''.'' | for one character. |
| ''*'' | for 0 or more repetitions. |
| ''\t'' | for tab. |
== Backup Critical Data and Configuration ==
==== Backup Web Systems ====
Create a daily cron task to backup some important files to a directory (for example: ''/data/backup''). This script should be created as ''/etc/cron.daily/backup.sh'':
#!/bin/bash
## script: /etc/cron.daily/backup.sh
##
#-----------------------------
# Define Target Directory
#-----------------------------
TARGETDIR="/data/backup/$HOSTNAME"
# Try to create TargetDir if it does not exist
if ! cd $TARGETDIR; then
mkdir $TARGETDIR
fi
# Perform operations if TargetDir exists
if cd $TARGETDIR; then
#-----------------------------
# Remove old backup file
#-----------------------------
#rm -rf $TARGETDIR/*
#-----------------------------
## Backup
#-----------------------------
# Backup mail spool
rm -f $TARGETDIR/mail-backup.tar.gz
tar -czvf $TARGETDIR/mail-backup.tar.gz /var/spool/mail
# Backup user directories
rm -f $TARGETDIR/homes-backup.tar.gz
tar -czvf $TARGETDIR/homes-backup.tar.gz /home
# Backup root user directories
rm -f $TARGETDIR/root-backup.tar.gz
tar -czvf $TARGETDIR/root-backup.tar.gz /root
# Backup system settings, ie. /etc directory
rm -f $TARGETDIR/etc-backup.tar.gz
tar -czvf $TARGETDIR/etc-dir.tar.gz /etc
# Backup MYSQL databases
rm -f $TARGETDIR/mysql-data-backup.tar.gz
tar -czvf $TARGETDIR/mysql-data-backup.tar.gz /var/lib/mysql
# Hot backup with mysqldump command:
# mysqldump -u -p >
# Restore with:
# mysql -u -p <
mysqldump -uroot -pMyPass website_db > $TARGETDIR/website_db.sql
tar -czf $TARGETDIR/website_db.tar.gz $TARGETDIR/website_db.sql
# Backup SAMBA config files (when using tdbsam)
rm -f $TARGETDIR/samba-data-backup.tar.gz
tar -czvf $TARGETDIR/samba-data-backup.tar.gz /var/lib/samba
# Backup website
rm -f $TARGETDIR/websitebackup.tar.gz
#tar -czvf $TARGETDIR/websitebackup.tar.gz /var/www
tar -czvf $TARGETDIR/websitebackup.tar.gz /var/www --exclude "/var/www/downloads" --exclude "/var/www/es/downloads"
rm -f $TARGETDIR/downloads-backup.tar.gz
tar -czvf $TARGETDIR/downloads-backup.tar.gz /var/www/downloads
# Backup database as SQL
# Backup projects
rm -f $TARGETDIR/projrepos.tar.gz
tar -czvf $TARGETDIR/projrepos.tar.gz /data/repos
#-----------------------------
# Send Reminder
#-----------------------------
## send reminder to sysadmin to pull the tarball from the server.
mail root@localhost -s "Get the backup tarball off the server"
else
## send message to sysadmin.
mail root@localhost -s "Backup failed. %TARGETDIR does not exist"
fi
==== Backup Subversion Repositories ====
Including Subversion repositories:
#!/bin/bash
#-----------------------------
# Define Repository Directory
#-----------------------------
REPOSDIR="/data/repos/myproj"
TARGETDIR="/data/backup/$HOSTNAME"
#---------------------------------------------------------
# Remove old Subversion dump file
#---------------------------------------------------------
rm -f $TARGETDIR/repo-myproj.svn_dump
#---------------------------------------------------------
# Step 1: Backup your old Repository
#---------------------------------------------------------
#
# The first thing you need when moving from one server to another
# is a dump of your subversion repository. Hopefully you are already
# creating dump's with a backup script, but if not here's how you can
# create a subversion dump file:
#
# svnadmin dump $REPOSDIR > $TARGETDIR/repo-myproj.svn_dump
rm -f $TARGETDIR/repo-clarujust.svn_dump
svnadmin dump $REPOSDIR > $TARGETDIR/repo-clarujust.svn_dump
rm -f $TARGETDIR/repo-ezarkd7.svn_dump
svnadmin dump $REPOSDIR > $TARGETDIR/repo-ezarkd7.svn_dump
rm -f $TARGETDIR/repo-ezfit4.svn_dump
svnadmin dump $REPOSDIR > $TARGETDIR/repo-ezfit4.svn_dump
rm -f $TARGETDIR/repo-ezfit4.localization.svn_dump
svnadmin dump $REPOSDIR > $TARGETDIR/repo-ezfit4.localization.svn_dump
rm -f $TARGETDIR/repo-ezfit5.svn_dump
svnadmin dump $REPOSDIR > $TARGETDIR/repo-ezfit5.svn_dump
rm -f $TARGETDIR/repo-ezfit-autorun.svn_dump
svnadmin dump $REPOSDIR > $TARGETDIR/repo-ezfit-autorun.svn_dump
rm -f $TARGETDIR/repo-ezhit.svn_dump
svnadmin dump $REPOSDIR > $TARGETDIR/repo-ezhit.svn_dump
rm -f $TARGETDIR/repo-eznzd7.svn_dump
svnadmin dump $REPOSDIR > $TARGETDIR/repo-eznzd7.svn_dump
rm -f $TARGETDIR/repo-gennum.svn_dump
svnadmin dump $REPOSDIR > $TARGETDIR/repo-gennum.svn_dump
rm -f $TARGETDIR/repo-installation.svn_dump
svnadmin dump $REPOSDIR > $TARGETDIR/repo-installation.svn_dump
rm -f $TARGETDIR/repo-mycomponents.svn_dump
svnadmin dump $REPOSDIR > $TARGETDIR/repo-mycomponents.svn_dump
rm -f $TARGETDIR/repo-nal.svn_dump
svnadmin dump $REPOSDIR > $TARGETDIR/repo-nal.svn_dump
rm -f $TARGETDIR/repo-prninvoice.svn_dump
svnadmin dump $REPOSDIR > $TARGETDIR/repo-prninvoice.svn_dump
rm -f $TARGETDIR/repo-projskel.tar.gz
tar czf $TARGETDIR/repo-projskel.tar.gz $REPOSDIR/projskel
rm -f $TARGETDIR/repo-conf.tar.gz
tar czf $TARGETDIR/repo-conf.tar.gz $REPOSDIR/conf
# The dump file contains all the revisions you have ever made
# to your svn repository, so it will probably be quite large
# (it even includes files you may have deleted in a previous revision).
#
#---------------------------------------------------------
# Step 2: Create the new Repository
#---------------------------------------------------------
#
# Now, simply transfer the dump file on to your new subversion server,
# and create an empty repository:
#
# svnadmin create /path/to/repository
# svnadmin create $REPOSDIR
#
#---------------------------------------------------------
# Step 3: Import your old repository into the new one
#---------------------------------------------------------
#
# Next import your dump file:
#
# svnadmin load /path/to/repository < repo_name.svn_dump
# svnadmin load $REPOSDIR < $TARGETDIR/repo-myproj.svn_dump
## send reminder to sysadmin to pull the tarball from the server.
#mail ttran -s "Get the backup tarball off the server"
==== Backup Databases ====
Create a scrip ''backup-db.sh'' to backup databases:
#!/bin/bash
## script: backup-db.sh
##
# backup last 7 days
#export d=`date +%u`
# backup using date
export d=$(date +'%Y-%m-%d')
mkdir -p backup/$d
#for i in `echo "show tables" | mysql -u username -ppassword database|grep -v Tables_in_`;
for i in `echo "show tables" | mysql -u root -p database|grep -v Tables_in_`;
do
echo $i; mysqldump --add-drop-table --allow-keywords -q -a -c -u username -ppassword database $i > backup/$d/$i.sql
rm -f backup/$d/$i.sql.gz
gzip backup/$d/$i.sql
done
==== Backup to Window Server ====
If you need to backup data to a remote Windows server (running Samba), use this script '''backup-to-winserver.sh'':
#!/bin/bash
## script: /etc/cron.daily/backuptowinsvr
##
###!!!! THIS SCRIPT IS DISABLED
###!!!! COMMENT OUT THIS NEXT LINE TO ENABLE
#exit 99
#-----------------------------
# Define Target Directory
#-----------------------------
SOURCEDIR="/data/backup/$HOSTNAME"
TARGETDIR="/data/win-fileserver"
# Verify if source is available, otherwise we bail out
if [ ! -d "$SOURCEDIR" ]; then
echo " Nothing to backup on $(date). Source directory $SOURCEDIR does not exist." >> /var/log/backup.log
echo " Nothing to backup on $(date)."
echo " Source directory $SOURCEDIR does not exist."
echo " Exiting."
exit;
fi
# Try to create and mount TargetDir if it does not exist
if [ ! -d "$TARGETDIR" ]; then
mkdir $TARGETDIR
fi
# Perform operations if TargetDir exists
if [ -d "$TARGETDIR" ]; then
#------------------------------------------
# Mount Windows server samba drive (CIFS)
#------------------------------------------
# Requires cifs-utils to be installed for mount to work.
mount -t cifs -o username=backuponly,password=backup //backupserver2/LinuxBackup $TARGETDIR
#-----------------------------
# Remove old backup files
#-----------------------------
rm -rf $TARGETDIR/$HOSTNAME/*
#-----------------------------
# Backup
#-----------------------------
# Backup ALL files
#cp -R $SOURCEDIR $TARGETDIR
# Backup all files EXCEPT 'downloads*' files
# Method 1: cp *?[!excludepattern] $SOURCEDIR $TARGETDIR
# Method 2: cp `ls $SOURCEDIR |grep -v ` $TARGETDIR
cd $SOURCEDIR
cp `ls $SOURCEDIR | grep -v downloads` $TARGETDIR/$HOSTNAME
#-----------------------------
# Send Reminder
#-----------------------------
## send reminder to sysadmin to pull the tarball from the server.
echo "Backup to Windows Backup Server Complete"
echo "Nightly Backup to Windows Backup Server Completed: $(date)" >> /var/log/backup.log
echo "Source: $SOURCEDIR" >> /var/log/backup.log
echo "Target: $TARGETDIR" >> /var/log/backup.log
#mail root@localhost -s "Get the backup tarball off the server"
else
## send message to sysadmin.
echo "Backup to Windows Backup Server failed on $(date). %TARGETDIR does not exist" >> /var/log/backup.log
echo "Backup to Windows Backup Server failed on $(date). %TARGETDIR does not exist"
#mail root@localhost -s "Backup failed. %TARGETDIR does not exist"
fi