Seite 6 von 7

Re: Automatisches Backup?

Verfasst: 22.11.2013 18:05
von schaumi
Probiere ich mal, Danke
LG

Re: Automatisches Backup?

Verfasst: 23.11.2013 10:49
von schaumi
Ich habe heute Morgen eine Fehlermeldung mit Mail bekommen. Der Job bei "cronjobservice.net" ist angestossen worden, stand aber fest bei "www.meine-domain.de/index.php".
Dadurch wurde zwar das Forum aufgerufen, blieb aber stehen, bis ein Zeitlimit auftrat und die Fehlermeldung auslöste.
Es liegt am Aufruf. Bisher hat mir leider niemand helfen können, wie sich ein "Bot" im Forum über die Parameter anmeldet. Habe hier im Forum schon versucht Informationen zu finden, leider nichts gefunden.
Ein Aufruf mit:

"Botname@www.meine-Domain.de" - kein Ergebnis zum Anstoss des "Automatischen Backup"
"www.meine-Domain.de/index.php?Botname" - kein Ergebnis zum Anstoss des "Automatischen Backup"

habe ich auch mit verschiedenen Kombinationen getestet, leider kein Erfolg.
Ich probiere ja, aber ein stochern im "Nebel" bringt halt nicht viel.
Welche Möglichkeit des Aufrufes zum Anstoss des "Automatischen Backup" gibt es denn?
Danke Schaumi

Re: Automatisches Backup?

Verfasst: 23.11.2013 23:06
von Miriam
Also ich würde den Aufruf so bewerkstelligen: http://www.anettes-quiltbox-forum.de/cron.php?cron_type=auto_backup

Re: Automatisches Backup?

Verfasst: 24.11.2013 10:07
von schaumi
Vielen Dank Miriam,
habe Deinen vorgeschlagenen Aufruf in den CronJob eingetragen und werde es versuchen, denn der Versuch macht bekanntlich klug. :)

Nochmals vielen Dank
Schaumi

Re: Automatisches Backup?

Verfasst: 24.11.2013 23:25
von Metzle
Hallo,

hast du denn auch einen entsprechenden Bot im Forum angelegt? Das ist natürlich auch Voraussetzung.

Re: Automatisches Backup?

Verfasst: 24.11.2013 23:54
von Miriam
Was für ein Bot soll denn das sein? :o

includes/functions.php

Code: Alles auswählen

    // Call cron-type script
    $call_cron = false;
    if (!defined('IN_CRON') && $run_cron && !$config['board_disable'] && !$user->data['is_bot'])
    {
        $call_cron = true;
        $time_now = (!empty($user->time_now) && is_int($user->time_now)) ? $user->time_now : time();

        // Any old lock present?
        if (!empty($config['cron_lock']))
        {
            $cron_time = explode(' ', $config['cron_lock']);

            // If 1 hour lock is present we do not call cron.php
            if ($cron_time[0] + 3600 >= $time_now)
            {
                $call_cron = false;
            }
        }
    } 
Also wenn der User ein Bot ist, bleibt $call_cron unwahr. Wenn die 1-Stunde-Verriegelung aktiv ist auch.

Re: Automatisches Backup?

Verfasst: 25.11.2013 09:58
von schaumi
Erst mal vielen Dank für die Antworten.
- @Metzle: Ich hatte einen Bot angelegt, diesen aber wieder gelöscht.
- Folgende Meldung kam um 1:07 Uhr per Mail:
Hallo schaumi,

Ihr Cronjob Backup konnte nicht fehlerfrei aufgerufen werden. Bitte überprüfen Sie Ihren Cronjob.
Fehlerhafte Aufrufe in Folge: 1

Mit freundlichen Grüßen
Ihr cronjobservice.net Team
- Der Aufruf des Cronjobs war wie Miriam angegeben: "http://www.anettes-quiltbox-forum.de/cr ... uto_backup".

- Der Backup ist gelaufen, ausgelöst durch den User "Anonymous" um 01:06, eigestellt war der Backup um 0:59 Uhr.

Werde den Job "Eingabemäßig" nochmals auf 0:59 aktivieren, wobei sich das Problem ergibt, das die Uhrzeit des Backuplaufs in die Tabelle
phpBB_config in dem Tabellenfeld "auto_backup_last_gc" die nächste Backup-Time einträgt, dann aber wieder mit der CronJobzeit nicht mehr übereinstimmt.
Der Automatische Ablauf hebt sich durch Verschiebung des Zeitfensters auf.
Soweit ich das verstehe, muss eine Änderung in der Datei: acp_auto_backup.php gemacht werden.
Und zwar hier:

Code: Alles auswählen

$this->tpl_name = 'acp_auto_backup';
		$this->page_title = 'ACP_AUTO_BACKUP_SETTINGS';

		$auto_backup_enable = request_var('auto_backup_enable', $config['auto_backup_enable']);
		$auto_backup_filetype = request_var('auto_backup_filetype', $config['auto_backup_filetype']);
		$auto_backup_copies = request_var('auto_backup_copies', $config['auto_backup_copies']);
		$auto_backup_optimize = request_var('auto_backup_optimize', $config['auto_backup_optimize']);
		$auto_backup_gc = request_var('auto_backup_gc', $config['auto_backup_gc']);
		$auto_backup_last_gc = request_var('auto_backup_last_gc', $config['auto_backup_last_gc']);
		$auto_backup_next = $user->format_date($config['auto_backup_last_gc'] + $config['auto_backup_gc'] * 86400);
		$auto_backup_time = $user->format_date($config['auto_backup_last_gc'] + $config['auto_backup_gc'] * 86400, 'Y-m-d-H-i');
		
		$form_name = 'acp_auto_backup';
		add_form_key($form_name);
Die 86400 ist die Multiplikation mit 24, also auf den Nächsten Tag,
Ich überlege, diese beiden Anweisungen zu deaktivieren, also auf Kommentar zu setzen.
Liege ich dann damit richtig?
Natürlich unter der Vorraussetzung, das der CronJob-Aufruf den User "Anonymous" als Auslöser akzeptiert, mit der täglichen Mail kann ich leben (oder auch abstellen).
Vielen Dank
Schaumi

Re: Automatisches Backup?

Verfasst: 26.11.2013 09:53
von schaumi
Der Cronjob ist heute Morgen gegen 1:18 Uhr durch den User "Anonymous" angestossen worden.
Nun fehlt noch zu meinem Glück, das nicht die letzte Backupzeit in die Tabelle eingetragen bzw. überschrieben wird, damit das Zeitfenster erhalten bleibt.
Kann mir einer einen Tipp geben, wo ich das Rücksetzen der Zeit verhindern kann.
Hier ist der code von dem File "acp_auto_backup.php", wo die neue Backup-Zeit gesetzt wird.

- root/includes/acp

Code: Alles auswählen

<?php
/**
*
* @package acp
* @copyright (c) 2011 Pico
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/

/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
    exit;
}

/**
* @package acp
*/
class acp_auto_backup
{
    var $u_action;
    function main($id, $mode)
    {
        global $db, $user, $auth, $template;
        global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;

        $action = request_var('action', '');
        $submit = (isset($_POST['submit'])) ? true : false;

        if ($mode != 'index')
        {
            return;
        }

        $this->tpl_name = 'acp_auto_backup';
        $this->page_title = 'ACP_AUTO_BACKUP_SETTINGS';

        $auto_backup_enable = request_var('auto_backup_enable', $config['auto_backup_enable']);
        $auto_backup_filetype = request_var('auto_backup_filetype', $config['auto_backup_filetype']);
        $auto_backup_copies = request_var('auto_backup_copies', $config['auto_backup_copies']);
        $auto_backup_optimize = request_var('auto_backup_optimize', $config['auto_backup_optimize']);
        $auto_backup_gc = request_var('auto_backup_gc', $config['auto_backup_gc']);
        $auto_backup_last_gc = request_var('auto_backup_last_gc', $config['auto_backup_last_gc']);
        $auto_backup_next = $user->format_date($config['auto_backup_last_gc'] + $config['auto_backup_gc'] * 86400);
        $auto_backup_time = $user->format_date($config['auto_backup_last_gc'] + $config['auto_backup_gc'] * 86400, 'Y-m-d-H-i');
        
        $form_name = 'acp_auto_backup';
        add_form_key($form_name);

        if ($submit)
        {
            if (!check_form_key($form_name))
            {
                trigger_error($user->lang['FORM_INVALID']. adm_back_link($this->u_action), E_USER_WARNING);
            }

            if ($auto_backup_gc <= 0)
            {
                trigger_error($user->lang['AUTO_BACKUP_FREQ_ERROR']. adm_back_link($this->u_action), E_USER_WARNING);
            }

            if (!is_numeric($auto_backup_copies) || $auto_backup_copies < 0)
            {
                trigger_error($user->lang['AUTO_BACKUP_COPIES_ERROR']. adm_back_link($this->u_action), E_USER_WARNING);
            }

            $error = array();

            $message = $user->lang['AUTO_BACKUP_SETTINGS_CHANGED'];
            $log = 'AUTO_BACKUP_SETTINGS_CHANGED';

            $auto_backup_date = explode('-', $auto_backup_last_gc);
            if (sizeof($auto_backup_date) == 5  &&    (strlen($auto_backup_date[0]) == 4) && (strlen($auto_backup_date[1]) == 2) && (strlen($auto_backup_date[2]) == 2) && ((int)$auto_backup_date[3] < 24) && (strlen($auto_backup_date[3]) == 2) && ((int)$auto_backup_date[4] < 60) && (strlen($auto_backup_date[4]) == 2))
            {
                $time_offset = (isset($user->timezone) && isset($user->dst)) ? (int)$user->timezone + (int)$user->dst : 0;
                $auto_backup_last_gc = gmmktime((int)$auto_backup_date[3], (int)$auto_backup_date[4], 0, (int)$auto_backup_date[1], (int)$auto_backup_date[2], (int)$auto_backup_date[0])- $time_offset - $config['auto_backup_gc'] * 86400;
            }
            else
            {
                trigger_error($user->lang['AUTO_BACKUP_TIME_ERROR']. adm_back_link($this->u_action), E_USER_WARNING);
            }

            set_config('auto_backup_enable', $auto_backup_enable);
            set_config('auto_backup_filetype', $auto_backup_filetype);
            set_config('auto_backup_gc', $auto_backup_gc);
            set_config('auto_backup_copies', $auto_backup_copies);
            set_config('auto_backup_optimize', $auto_backup_optimize);
            set_config('auto_backup_last_gc', $auto_backup_last_gc);
            
            add_log('admin', 'LOG_' . $log);
            trigger_error($message . adm_back_link($this->u_action));
        }

        $template->assign_vars(array(
            'U_ACTION'                => $this->u_action,
            'AUTO_BACKUP_ENABLE'    => $auto_backup_enable,
            'AUTO_BACKUP_FILETYPE'    => $auto_backup_filetype,
            'AUTO_BACKUP_GC'        => $auto_backup_gc,
            'AUTO_BACKUP_COPIES'    => $auto_backup_copies,
            'AUTO_BACKUP_OPTIMIZE'    => $auto_backup_optimize,
            'AUTO_BACKUP_NEXT'        => $auto_backup_next,
            'AUTO_BACKUP_TIME'        => $auto_backup_time,
            'AB_GZIP'                => $auto_backup_filetype == 'gzip',
            'AB_BZIP2'                => $auto_backup_filetype == 'bzip2',
            'AB_TEXT'                => $auto_backup_filetype == 'text',
            'GZIP'                    => @extension_loaded('zlib') ? true : false,
            'BZIP2'                    => @extension_loaded('bz2') ? true : false,
        ));
    }
}

?>
Welche Variable muss so gesetzt werden, damit die ursprüngliche Backup-Zeit erhalten bleibt und nicht auf die momentane Backup-Zeit überschrieben wird.
Vielen Dank für eine Unterstützung zur Änderung.
LG Schaumi

Re: Automatisches Backup?

Verfasst: 26.11.2013 12:26
von Miriam
Streng mal Deine Augen und den Kopf ein bißchen an.

set_config('auto_backup_last_gc', $auto_backup_last_gc);

Auskommentierten kannst Du doch.

Re: Automatisches Backup?

Verfasst: 26.11.2013 21:28
von schaumi
Vielen Dank für die Hilfe Miriam,

Augen sind auf, gefunden und auskommentiert.
Test durchgeführt.
- Wenn die Anweisung "set_config('auto_backup_last_gc', $auto_backup_last_gc);" auskommentiert wird, dann ist der Wert "{ AUTO_BACKUP_DATE_TIME }" in der ACP nicht mehr veränderbar.
- nach einem Backup, wird die aktuelle Backupzeit um 24 Std in die Tabelle zurückgeschrieben.
- in der ACP kann ich den Wert nicht mehr ändern (es sei denn, ich nehme die Auskommentierung zurück)

Ich wollte eigentlich, das die in der ACP vorgegebene Zeit um 24 Std. erweitert wird, also die gleiche Uhrzeit am nächsten Tag.
Beispiel:

Start am 13-11-26-01-00 durch Eingabe in der ACP "{ AUTO_BACKUP_DATE_TIME }"
CronJob wird am 13-11-26-01-44 gestartet, ausgelöst durch den User "Anonymous" vom externen CronJobservice
Backup wird durchgeführt
Übernahme in "{ AUTO_BACKUP_DATE_TIME }" 13-11-27-01-00


Bin ich im falschen php-File?
Das von mir angezeigte File steht im Verzeichnis: root/includes/acl
Es sieht so aus, das das setzen der neuen Backupzeit in einem anderen File stattfindet.
Bin im Moment ratlos,
wo liegt bei mir der Denkfehler?
Vielen Dank
Schaumi

Update: Ich habe es gefunden, in dem File auto_Backup.php im Verzeichnis root/includes steht folgender code

Code: Alles auswählen

* @ignore
*/
if (!defined('IN_PHPBB'))
{
    exit;
}

/**
* Auto Backup
*/
function auto_backup()
{
    global $config, $db, $phpbb_root_path, $phpEx, $table_prefix;

    include($phpbb_root_path . 'includes/functions_install.' . $phpEx);
    include($phpbb_root_path . 'includes/acp/acp_database.' . $phpEx);
    
    $time = time();
    $name = 'backup_' . $time . '_' . unique_id();
    $format = $config['auto_backup_filetype'];

    set_config('auto_backup_last_gc', $time, true);
    add_log('admin', 'LOG_DB_BACKUP');
    
    // Optimize database before backup (only unoptimized tables)
    if ($config['auto_backup_optimize'])
    {
        if ($result = $db->sql_query('SHOW TABLE STATUS'))
        {
            $tables = $db->sql_fetchrowset($result);

            for ($i = 0, $size = sizeof($tables); $i < $size; $i++ )
            {
                if ( $tables[$i]['Data_free'] != 0 )
                {
                    $for_optimize[] = $tables[$i]['Name'];
                }
            }

            if (!empty($for_optimize))
            {
                $tables = implode(',', $for_optimize);
                $db->sql_query('OPTIMIZE TABLE ' . $tables);
            }
        }
    }
    
    @set_time_limit(1200);
    @set_time_limit(0);
    
    switch ($db->sql_layer)
    {
        case 'mysqli':
        case 'mysql4':
        case 'mysql':
            $extractor = new mysql_extractor(false, true, $format, $name, $time);
        break;

        case 'sqlite':
            $extractor = new sqlite_extractor(false, true, $format, $name, $time);
        break;

        case 'postgres':
            $extractor = new postgres_extractor(false, true, $format, $name, $time);
        break;

        case 'oracle':
            $extractor = new oracle_extractor(false, true, $format, $name, $time);
        break;

        case 'mssql':
        case 'mssql_odbc':
            $extractor = new mssql_extractor(false, true, $format, $name, $time);
        break;

        case 'firebird':
            $extractor = new firebird_extractor(false, true, $format, $name, $time);
        break;
    }

    $extractor->write_start($table_prefix);

    foreach (get_tables($db) as $table_name)
    {
        $extractor->write_table($table_name);
        $extractor->write_data($table_name);
    }

    $extractor->write_end();
        
    // Delete backup
    if ($config['auto_backup_copies'])
    {
        $rep = $phpbb_root_path . '/store/';
        $dir = opendir($rep);
        $files = array();
        while (($file = readdir($dir)) !== false)
        {
            if (is_file($rep . $file) && (substr($file, -3) == '.gz' || substr($file, -4) == '.bz2' || substr($file, -4) == '.sql' ))
            {
                $files[$file] = fileatime($rep . $file);
            }
        }
        closedir($dir);

        arsort($files);
        reset($files);

        if (sizeof($files) > $config['auto_backup_copies'])
        {
            $i = 0;
            while (list($key, $val) = each($files))
            {
                $i++;
                if ($i > $config['auto_backup_copies'])
                {
                    @unlink($rep . $key);
                }
            }
        }
    }
}

Eigentlich sollte dort folgender code verändert werden:

Code: Alles auswählen

set_config('auto_backup_last_gc', $time, true);
Ich hoffe, ich liege richtig
LG Schaumi