Search left

Archive for May, 2008


How to create a full backup of Plesk client data



The problem: Making a daily/weekly/monthly backup of your *nix Plesk server, with no other 3rd party tools involved.
Subrelated problem
: The server may be pretty unresponsive during the backup process. We can avoid that by “niceing” the process.

The solution: We’ll use pleskbackup and some sh scripting. Our idea is to make a daily backup of all domains and settings, and keep the last 7 backups (as you will see you can modify the number of days to retain, the location, the backup name).

The backup file will have the day as a suffix, for an easier identification.

Also, the backups will be saved in a dedicated folder to ease the process of rsync to another server (syncing to Amazon S3 will follow).

#!/bin/sh

# Nice Plesk Backup
# (c) 2008 Frontline softworks, www.frontline.ro
# Visit http://sandbox.frontline.ro for updates

# Plesk Backup Utility Location
PleskBackup='/usr/local/psa/bin/pleskbackup'

# Backup folder
BackupFolder='/--plesk-backup/';

#Backup filename
BackupFileName='plesk-server';

#Backup extension
BackupExt='bak';

# Number of backups to keep
NrOfBackups=7;

# Generate the file names for the backups to keep (last NrOfBackups including today)
for (( i=0; i<$NrOfBackups; i++)); do
    FileToKeep[$i]=`date --date=$i' day ago' +%Y%m%d`;
done

# Generate the complete path of the backup files to keep
for (( i=0;i<${#FileToKeep[@]};i++)); do
    FileToKeep[$i]=$BackupFolder$BackupFileName-${FileToKeep[i]}.$BackupExt;
done

# Start PleskBackup Utility for current day, save to FileToKeep[0]
# We'll renice the process, to avoid server lockup during backup
# Other usefull parameters
# -v: Verbose (useful for debugging)
# --skip-logs: skips client logs
nice -15 $PleskBackup all ${FileToKeep[0]}

# Search the backup folder, and delete all the files older than last 'NrOfBackups' days
for file in `find $BackupFolder -type f -name $BackupFileName\*$BackupExt`; do
    donotdelete=false;

for (( i=0;i<${#FileToKeep[@]};i++)); do
    if [ "$file" = "${FileToKeep[i]}" ]; then
        donotdelete=true;
    fi
done

    if [ "$donotdelete" = "false" ]; then
        rm $file;
    fi
done

Save the above script in /etc/cron.daily and wait for the daily run.

Have fun playing …


Posted on May 23rd, 2008 in General, Linux, Plesk | 1 Comment »



How to trim/pack Spamassassin´s auto-whitelist



The problem: if a mailbox has spam filtering enabled, Spamassasin creates and maintain an auto-whitelist for each of it, and this file increases in time. Generally, every admin wants to trim it or limit it’s size.

Solution 1: On Debian Etch servers running Plesk / QMail & Spamassassin, each mail user has it’s own config files /var/qmail/mailnames/domain/user/.spamassassin. You can add bayes_expiry_max_db_size to each user local.cf or default.cf, but it’s not a global solution and it’s hard to maintain to new users.

Solution 2: Another approach is to run a job (let’s say weekly) to automatically trim the auto-whitelist for all mail users on the server. It’s fast, easy … and you can forget about this in the cron job ;)

After a bit of googling, we found a script to trim old and unused records from an auto-whitelist file here. (in the rest of the article, we’ll assume that the above script is saved as /root/bin/trim-spamassasin-auto-whitelist and it’s made executable with chmod +x)

So far, so good, but the above script works on only one given auto-whitelist.

We can use some bash/sh scripting to find all the mail users settings and apply the trimming to every file, as follows:

#!/bin/sh

# Trim old records and unused space from mail users's .spamassasin/auto-whitelist
# (c) 2008 Frontline softworks, www.frontline.ro
# Visit http://sandbox.frontline.ro for updates

# Trim Utility Location
# Get if from http://www.deepnet.cx/~kdeugau/spamtools/trim_whitelist
TrimUtility='/root/bin/trim-spamassasin-auto-whitelist'

# Users mail storage folder
UsersMail='/var/qmail/mailnames/'

# Auto-whitelist file name
AutoFileName='auto-whitelist'

# Find all Plesk users auto-whitelist
for file in `find $UsersMail -type f -name $AutoFileName`; do
    # Run the trim tool on this mailbox
    # See http://www.deepnet.cx/~kdeugau/spamtools/trim_whitelist
    $TrimUtility $file;

    # After the file is trimmed, there is an '-old' file which we don't need it anymore
    if [ -e $file'-old' ]; then
        rm $file'-old';
    fi;
done

Save the above script in /etc/cron.weekly and wait for the weekly run.

Have fun playing …


Posted on May 13th, 2008 in Debian, Linux, Plesk | 1 Comment »



 



Footer left Footer right