Current time: 07-03-2024, 10:14 AM Hello There, Guest! (LoginRegister)


Post Reply 
Ispcp Backup konfiguration
Author Message
pilleee Offline


Posts: 2
Joined: May 2010
Reputation: 0
Post: #1
Ispcp Backup konfiguration
Hallo,

Ich habe den Document Root von ispcp in /var/www/virtuals. Als unterordner befinden sich hier die namen der subdomains mit jeweils einem ordner "htdocs", die qwiderum als document root der subdomain gelten.
Meine Frag ist nun: Wie kann ich es so einstellen, dass der nicht die komplette domain sichert, sondern nur den ordner einer bestimmten Subdomain? Hier habe ich das backupscript von ispcp: Dies befindet sich in /var/www/ispcp/engine/backup/ und trägt den Namen "ispcp-backup-all".
Dies wird in der /etc/cron.d täglich als Root ausgeführt:

Code:
#!/usr/bin/perl

# ispCP ω (OMEGA) a Virtual Hosting Control Panel
# Copyright (C) 2001-2006 by moleSoftware GmbH - http://www.molesoftware.com
# Copyright (C) 2006-2010 by isp Control Panel - http://ispcp.net
#
# Version: $Id: ispcp-backup-all 2511 2010-01-11 08:08:16Z joximu $
#
# The contents of this file are subject to the Mozilla Public License
# Version 1.1 (the "License"); you may not use this file except in
# compliance with the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS"
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
# License for the specific language governing rights and limitations
# under the License.
#
# The Original Code is "VHCS - Virtual Hosting Control System".
#
# The Initial Developer of the Original Code is moleSoftware GmbH.
# Portions created by Initial Developer are Copyright (C) 2001-2006
# by moleSoftware GmbH. All Rights Reserved.
# Portions created by the ispCP Team are Copyright (C) 2006-2010 by
# isp Control Panel. All Rights Reserved.
#
# The ispCP ω Home Page is:
#
#    http://isp-control.net
#

use FindBin;
use lib "$FindBin::Bin/..";
require 'ispcp_common_code.pl';

use strict;
use warnings;

our $backup_lock_file = "/tmp/ispcp-backup-all.lock";

sub lock_backup_all_system {

    push_el(\@main::el, 'lock_backup_all_system()', 'Starting...');

    if ($main::cfg{'BACKUP_DOMAINS'} ne 'yes') {

        push_el(\@main::el, 'lock_backup_all_system()', 'NOTICE: domain backups are disabled');
        return 2;
    }

    if (-e $backup_lock_file) {

        push_el(\@main::el, 'lock_backup_all_system()', 'ERROR: backup request engine already locked!');
        return 1;

    }

    my $touch_cmd = "$main::cfg{'CMD_TOUCH'} $backup_lock_file";

    my $rs = sys_command($touch_cmd);
    return 1 if ($rs != 0);

    push_el(\@main::el, 'lock_backup_all_system()', 'Ending...');

    return 0;
}


sub unlock_backup_all_system {

    push_el(\@main::el, 'unlock_backup_all_system()', 'Starting...');

    my $rs = del_file($backup_lock_file);
    return $rs if ($rs != 0);

    push_el(\@main::el, 'unlock_backup_all_system()', 'Ending...');

    return 0;

}


sub backup_all_start_up {

    my ($rs, $rdata) = (undef, undef);

    push_el(\@main::el, 'backup_all_start_up()', 'Starting...');

    $rs = lock_backup_all_system();
    return $rs if ($rs != 0);

    # config check;

    $rs = get_conf();
    return $rs if ($rs != 0);

    push_el(\@main::el, 'backup_all_start_up()', 'Ending...');

    return 0;

}


sub backup_all_shut_down {


    my $rs = undef;

    push_el(\@main::el, 'backup_all_shut_down()', 'Starting...');

    $rs = unlock_backup_all_system();
    return $rs if ($rs != 0);

    push_el(\@main::el, 'backup_all_shut_down()', 'Ending...');
    return 0;

}


sub err_exit {

    my $el_data = pop_el(\@main::el);

    $main::el_sep = "\t#\t";

    my ($sub_name, $msg) = split(/$main::el_sep/, $el_data);

    print STDERR "$msg\n";

    unlock_backup_all_system($backup_lock_file);
    exit 1;

}

sub backup_sql {

    push_el(\@main::el, 'backup_sql()', 'Starting...');

    my ($dmn_id, $dmn_name, $domain_uid, $domain_gid) = @_;
    my $zip = $main::cfg{'ZIP'};
    my ($rs, $rdata, $sql) = (undef, undef, undef);

    my $dmn_backup_dir = $main::cfg{'APACHE_WWW_DIR'}."/$dmn_name/backups";

    $sql = "SELECT sqld_id, sqld_name FROM sql_database WHERE domain_id=$dmn_id";
    ($rs, $rdata) = doSQL($sql);

    foreach (@$rdata) {

        my $db_id = @$_[0];
        my $db_name = @$_[1];
        my $db_backup_file = "$dmn_backup_dir/$db_name.sql";
        my ($db_filename, $db_compresscmd) = (undef, undef);

        my $db_backupcmd = "$main::cfg{'CMD_MYSQLDUMP'} --add-drop-table --allow-keywords --quote-names -h'$main::cfg{'DATABASE_HOST'}' -u'$main::cfg{'DATABASE_USER'}' -p'".decrypt_db_password($main::cfg{'DATABASE_PASSWORD'})."' '$db_name' >'$db_backup_file'";

        if ($zip eq "bzip2") {
            $db_filename = "$db_backup_file.bz2";
            $db_compresscmd = "$main::cfg{'CMD_BZIP'} --force '$db_backup_file'";
        } elsif ($zip eq "gzip") {
            $db_filename = "$db_backup_file.gz";
            $db_compresscmd = "$main::cfg{'CMD_GZIP'} --force '$db_backup_file'";
        } elsif ($zip eq "lzma") {
            $db_filename = "$db_backup_file.lzma";
            $db_compresscmd = "$main::cfg{'CMD_LZMA'} --force '$db_backup_file'";
        } else {
            push_el(\@main::el, 'backup_sql()', "Domain $dmn_name: Backup algorithm for domain $dmn_name not supported: $zip!");
            send_error_mail('backup_sql()', "Domain $dmn_name: Backup algorithm for domain $dmn_name not supported: $zip!");
            return -1;
        }

        $rs = sys_command($db_backupcmd);
        if( $rs != 0 ){
            push_el(\@main::el, 'backup_sql()', "Domain $dmn_name: ERROR: Failed to backup database $db_name!");
            send_error_mail('backup_sql()', "Domain $dmn_name: ERROR: Failed to backup database $db_name!");
            unlink($db_backup_file);
            return $rs;
        }

        $rs = setfmode("$db_backup_file", $domain_uid, $domain_gid, 0660);
        if( $rs != 0 ){
            push_el(\@main::el, 'backup_sql()', "Domain $dmn_name: ERROR: Can not chmod 0660 uid: $domain_uid gid: $domain_gid file $db_backup_file!");
            send_error_mail('backup_sql()', "Domain $dmn_name: ERROR: Can not chmod 0660 uid: $domain_uid gid: $domain_gid file $db_backup_file!");
            unlink($db_backup_file);
            return $rs;
        }

        $rs = sys_command($db_compresscmd);
        if ($rs != 0){
            push_el(\@main::el, 'backup_sql()', "Domain $dmn_name: ERROR: Error while executing  $db_compresscmd!");
            send_error_mail('backup_sql()', "Domain $dmn_name: ERROR: Error while executing $db_compresscmd!");
            unlink($db_backup_file);
            return $rs;
        }

    }

    push_el(\@main::el, 'backup_sql()', 'Ending...');
    return 0;
}

sub backup_all_engine {

    push_el(\@main::el, 'backup_all_engine()', 'Starting...');

    my ($rs, $rdata, $sql) = (undef, undef, undef);
    my $zip = $main::cfg{'ZIP'};

    $sql = "
        SELECT
            t1.domain_id,
            t1.domain_name,
            t1.domain_status,
            t1.domain_uid,
            t1.domain_gid,
            t1.allowbackup,
            t2.admin_name,
            t2.email
        FROM
            domain AS t1,
            admin AS t2
        WHERE
                t1.domain_status    = 'ok'
            AND    t1.domain_admin_id    = t2.admin_id
            AND     t1.allowbackup        != 'no'
        ORDER BY
            t1.domain_id
    ";

    ($rs, $rdata) = doSQL($sql);
    return $rs if ($rs != 0);

    my $cmd_tar = $main::cfg{'CMD_TAR'};

    my $cmd_rm = $main::cfg{'CMD_RM'};

    my $cmd_mv = $main::cfg{'CMD_MV'};

    my $httpd_uid = $main::cfg{'APACHE_USER'};

    my $httpd_gid = $main::cfg{'APACHE_GROUP'};

    foreach (@$rdata) {

    # DO NOT RETURN, even if backup throws an error, otherwise other domains will not be backuped
    # I DO MEAN IT :)

        my ($dmn_id, $dmn_name, $dmn_status, $domain_uid, $domain_gid, $allowbackup, $admin_name, $admin_email) = (@$_[0], @$_[1], @$_[2], @$_[3], @$_[4], @$_[5], @$_[6], @$_[7]);

        if ($allowbackup eq "full" || $allowbackup eq "dmn" || $allowbackup eq "sql") {

            my $date = get_human_date();
            my $www_dir = $main::cfg{'APACHE_WWW_DIR'};
            my $dmn_dir = $main::cfg{'APACHE_WWW_DIR'}."/$dmn_name";
            my $dmn_backup_dir = $main::cfg{'APACHE_WWW_DIR'}."/$dmn_name/backups";
            my ($backup_filename, $backup_cmd) = (undef, "");

            #
            # User Database Backup
            #

            if (! -d $dmn_backup_dir) {
                $rs = make_dir($dmn_backup_dir, $domain_uid, $domain_gid, 0770);
                return $rs if ($rs != 0);
            }

            if( $zip eq 'bzip2' || $zip eq 'gzip' || $zip eq 'lzma' || $zip eq 'xz') {
                $backup_filename = "$dmn_name-backup-$date.tar.".($zip eq 'bzip2' ? 'bz2' : ($zip eq 'gzip' ? 'gz' : $zip));
                if ($allowbackup eq "full" || $allowbackup eq "dmn") {
                    $backup_cmd = "$cmd_tar --create --directory=$dmn_dir --$zip --file=$www_dir/$backup_filename --exclude=logs --exclude=phptmp --exclude=backups . 2> $www_dir/$backup_filename.log";
                }
                if ( $allowbackup eq "full" || $allowbackup eq "sql" ) {
                    $rs = backup_sql($dmn_id, $dmn_name, $domain_uid, $domain_gid);
                }
            } else {
                push_el(\@main::el, 'backup_all_engine()', "Backup algorithm not supported: $zip for domain $dmn_name!");
                send_error_mail('backup_all_engine()', "Backup algorithm not supported: $zip for domain $dmn_name!");
            }

            if ( length($backup_cmd) != 0 ) {
                $rs = sys_command($backup_cmd);

                if ($rs == 0) { # everything ok

                    $rs = sys_command("$cmd_rm -rf $www_dir/$backup_filename.log");
                    if ($rs != 0){
                        push_el(\@main::el, 'backup_all_engine()', "Domain $dmn_name: Error while executing $cmd_rm -rf $www_dir/$backup_filename.log!");
                        send_error_mail('backup_all_engine()', "Domain $dmn_name: Error while executing $cmd_rm -rf $www_dir/$backup_filename.log!");
                    }

                    $rs = sys_command("$cmd_rm -rf $dmn_backup_dir/$dmn_name-*.tar.*");
                    if ($rs != 0){
                        push_el(\@main::el, 'backup_all_engine()', "Domain $dmn_name: Error while executing $cmd_rm -rf $dmn_backup_dir/$dmn_name-*.tar.*!");
                        send_error_mail('backup_all_engine()', "Domain $dmn_name: Error while executing $cmd_rm -rf $dmn_backup_dir/$dmn_name-*.tar.*!");
                    }

                    $rs = sys_command("$cmd_mv -f $www_dir/$backup_filename $dmn_backup_dir");
                    if ($rs != 0){
                        push_el(\@main::el, 'backup_all_engine()', "Domain $dmn_name: Error while executing $cmd_mv -f $www_dir/$backup_filename $dmn_backup_dir!");
                        send_error_mail('backup_all_engine()', "Domain $dmn_name: Error while executing $cmd_mv -f $www_dir/$backup_filename $dmn_backup_dir!");
                    }

                    $rs = setfmode("$dmn_backup_dir/$backup_filename", $domain_uid, $domain_gid, 0660);
                    if ($rs != 0){
                        push_el(\@main::el, 'backup_all_engine()', "Domain $dmn_name: Error while changing mode to 0660 uid: $domain_uid gid: $domain_gid for $dmn_backup_dir/$backup_filename!");
                        send_error_mail('backup_all_engine()', "Domain $dmn_name: Error while changing mode to 0660 uid: $domain_uid gid: $domain_gid for $dmn_backup_dir/$backup_filename!");
                    }

                } else { # some error occurred

                    push_el(\@main::el, 'backup_all_engine()', "Domain $dmn_name: ERROR: tar returned exit status $rs, have a look in $www_dir/$backup_filename.log");
                    # send mail so we know something went wrong...
                    send_error_mail('backup_all_engine()', "Domain $dmn_name: ERROR: tar returned exit status $rs, have a look in $www_dir/$backup_filename.log");

                    # delete backup file...
                    if ( -e "$www_dir/$backup_filename" ) {
                        $rs = del_file("$www_dir/$backup_filename");
                        if ($rs != 0){
                            push_el(\@main::el, 'backup_all_engine()', "Domain $dmn_name: Error while removing file $www_dir/$backup_filename!");
# we don't need a second mail...            send_error_mail('backup_all_engine()', "Domain $dmn_name: Error while removing file $dmn_dir/$backup_filename!");
                        }
                    }

                }
            }
        } else {
            push_el(\@main::el, 'backup_all_engine()', "Domain $dmn_name: ERROR: the type of backup (*$allowbackup*) is not allowed!");
        }
    }

    push_el(\@main::el, 'backup_all_engine()', 'Ending...');

    return 0;

}

my $rs = undef;
my $proceed = $ARGV[0];

if (!defined($proceed) || $proceed eq '') {

    push_el(\@main::el, 'main()', "ERROR: Missing Input Data! Please provide appropriate command line parameter(s)!");

    err_exit();

}

if ($proceed ne 'yes') {

    push_el(\@main::el, 'main()', "NOTICE: If you want full backup of your domain data, please run this script with 'yes' command line parameter!");

    err_exit();

}

$rs = backup_all_start_up();
err_exit() if ($rs != 0 && $rs != 2);

exit 0 if ($rs == 2); # $rs == 2 when backups are disabled

$rs = backup_all_engine();
err_exit() if ($rs != 0);

$rs = backup_all_shut_down();
err_exit() if ($rs != 0);

exit 0;

*add*
Ich bin nicht so bewandt in Shell-programmierung, deswegen wäre eine ausführliche, "noob-gerechte" Erklärung nett.

Vielen Dank
(This post was last modified: 05-31-2010 11:22 PM by pilleee.)
05-31-2010 11:21 PM
Find all posts by this user Quote this message in a reply
Post Reply 


Messages In This Thread
Ispcp Backup konfiguration - pilleee - 05-31-2010 11:21 PM
RE: Ispcp Backup konfiguration - joximu - 06-01-2010, 12:10 AM
RE: Ispcp Backup konfiguration - pilleee - 06-01-2010, 01:44 AM
RE: Ispcp Backup konfiguration - ZooL - 06-01-2010, 07:56 AM
RE: Ispcp Backup konfiguration - MasterTH - 06-05-2010, 09:32 AM
RE: Ispcp Backup konfiguration - p3g3h - 09-23-2010, 09:57 AM

Forum Jump:


User(s) browsing this thread: 1 Guest(s)