LINUX.ORG.RU

Mandrill сломался.

 ,


0

1

На сайте используется отправка сообщений с помощью mandrill. Раньше работала нормально, но вчера сломалась. Проверяла логи пусто в msmtp.log, mail_log.txt и в таблице b_event. В момент поломки я добавляла шаблон для типа sale_new_order. Проверяла удалив шаблон, все равно не робит.

★★
Ответ на: комментарий от kostik87

нем могу, последний бэкап сделан 3 месяца назад, а тогда мандрилы на этом сайте и в помине не было.

gssomi ★★
() автор топика
Ответ на: комментарий от gssomi

Тогда разбирайся что сделали твои действия и пытайся исправить последствия.

kostik87 ★★★★★
()
Ответ на: комментарий от gssomi

Люди делятся на две категории: кто еще не делает бэкапы, и кто их уже делает

У меня, например, бекапы кажный час делаются, инкрементальные, на всех сайтах, включая БД.

deep-purple ★★★★★
()
Ответ на: комментарий от deep-purple

сайт без ядра и картинок вест 1,5гиг. с ядром без картинок вест 3.2 гиг. жрет оооооочень много, из-за нехватки памяти битрикс просто ест код. Вот по этому удалили несколько бэкапов. Делается бэкап редко по этой же причине. точно в битбакете ж было

gssomi ★★
() автор топика
Ответ на: комментарий от sin_a

инкрементальный бекап

вот оно как называется =). спасибо, что напомнили.

gssomi ★★
() автор топика

А вот траблы могут быть из-за ключа мандриллы?

gssomi ★★
() автор топика
Ответ на: комментарий от gssomi

Прозреваю, что полтора гига у тебя там всякие кэши и временные файлы весят. Есть же штатный бэкапер битрикса, который позволяет без этого хлама архив делать

r_asian ★☆☆
()
Ответ на: комментарий от r_asian

кэш очищается, временных файлов не много. Есть не спорю, ею и пользуюсь.

gssomi ★★
() автор топика
Ответ на: комментарий от webmuxa

Карч смари. Вешаешь сайт на гит. В гитигнор там по своему усмотрению игноришь что надо, т.к. хз чо у тебя там за сайты и какая их структура.

Сайты у меня там пыховые и скрипт пыховый. Его испражнения и он сам — в гитигноре:

$ cat ./.gitignore
cron-backup.php
cron-backup.lock
cron-backup-errors.log
У тебя пути могут отличаться, может быть вообще не понадобится игнорить. Сам скрипт тоже конфижицца. Тестируешь с кансоли, потом добавляешь его в крон с нужным интервалом и все.

Вот само поделие:

<?php



/////// MAIN CONFIGURATION ///////////////////////////////////////

$mainDirectory = realpath(dirname(__FILE__));
$lockFile      = $mainDirectory . '/cron-backup.lock';
$logFile       = $mainDirectory . '/cron-backup-errors.log';

$gitDirectory  = $mainDirectory;
$dateTime      = date('Y-m-d H:i:s');
$remoteBranch  = 'master';
$localBranch   = 'master';

$dbDirectory   = $gitDirectory . '/SQL';
$dbStructFile  = $dbDirectory  . '/structure.sql';
$dbDataFile    = $dbDirectory  . '/data.sql';

$dbUser        = 'dbuser';
$dbPassword    = 'dbpass';
$dbName        = 'dbname';

//////////////////////////////////////////////////////////////////



// call from server-side is denied
if (PHP_SAPI !== 'cli') {
    exit();
}
// clear filesystem cache
clearstatcache();


/**
 * EC class
 *
 * Execute command wrapper
 */

class EC {


    /**
     * $_status
     *
     * Status of command
     */

    private static $_status = 0;


    /**
     * $_result
     *
     * Array of strings (lines) of command
     */

    private static $_result = array();


    /**
     * execute
     *
     * Will execute command
     *
     * @param  string $command Command for execution
     * @return null
     */

    public static function execute($command)
    {
        self::$_status = 0;
        self::$_result = array();
        exec($command . ' 2>&1', self::$_result, self::$_status);
    }


    /**
     * getResult
     *
     * Will return result string or array
     *
     * @param  bool $asArray Mode of return type
     * @return string|array  Result string or array
     */

    public static function getResult($asArray = false)
    {
        return $asArray ? self::$_result : join(PHP_EOL, self::$_result);
    }


    /**
     * getStatus
     *
     * Will return status of command
     *
     * @return int Status of command
     */

    public static function getStatus()
    {
        return self::$_status;
    }
}


/**
 * showMessage
 *
 * Will show text message
 *
 * @param  string $message Text of message
 * @return null
 */

function showMessage($message)
{
    echo $message . PHP_EOL;
}


// now run process
try {


    showMessage('Begin update process');
    // check log file
    $canWriteLog = false;
    if (is_dir($logFile)) {
        throw new Exception(
            'Log file is exists and this is directory: ' . $logFile
        );
    }
    $isExLogFile = @ is_file($logFile);
    if (!$isExLogFile) {
        $touchStatus = @ touch($logFile);
        if (!$touchStatus) {
            throw new Exception(
                'Can\'t create log file: ' . $logFile
            );
        }
    }
    if (!is_writable($logFile)) {
        throw new Exception(
            'Log file has not have writable permission: ' . $logFile
        );
    }
    $canWriteLog = true;

    // try chdir to git directory
    $cd = @ chdir($gitDirectory);
    if (!$cd) {
        throw new Exception('Can\'t change directory to: ' . $gitDirectory);
    }

    // try open lock file
    $fd = @ fopen($lockFile, 'w+');
    if (!$fd) {
        throw new Exception('Can\'t open lock file: ' . $lockFile);
    }
    if (!flock($fd, LOCK_EX)) {
        throw new Exception('Can\'t get exclusive lock for file: ' . $lockFile);
    }

    // backup structure from database
    EC::execute(
        'mysqldump --no-data --compact --skip-comments'
            . ' -u' . $dbUser
            . ' -p' . $dbPassword
            . ' '   . $dbName
            . ' > ' . $dbStructFile
    );
    if (EC::getStatus()) {
        throw new Exception('Can\'t backup structure from database');
    }
    // backup data from database
    EC::execute(
        'mysqldump --no-create-info --compact --skip-comments --extended-insert=FALSE'
            . ' -u' . $dbUser
            . ' -p' . $dbPassword
            . ' '   . $dbName
            . ' > ' . $dbDataFile
    );
    if (EC::getStatus()) {
        throw new Exception('Can\'t backup data from database');
    }

    // get git status
    EC::execute('git status');
    if (EC::getStatus()) {
        throw new Exception('Can\'t get git status');
    }
    $hasExistsLocalChanges = !preg_match(
        '/(nothing to commit|нечего коммитить)/', // есть же дебилы с русской локалью
        EC::getResult()
    );

    // local changes found
    if ($hasExistsLocalChanges) {
        showMessage('Found local changes');
        // add new files
        showMessage('Try add new files...');
        EC::execute('git add .');
        if (EC::getStatus()) {
            throw new Exception('Can\'t add new files (git add .)');
        }
        // add new commit
        showMessage('Try commit local changes...');
        EC::execute(
            "git commit -am '$dateTime autocommit'"
        );
        if (EC::getStatus()) {
            throw new Exception('Can\'t commit local changes');
        }
    }

    // pull remote changes
    showMessage('Try pull remote changes...');
    EC::execute("git pull origin $remoteBranch");
    if (EC::getStatus()) {
        throw new Exception('Can\'t pull remote changes');
    }

    // local changes found
    if ($hasExistsLocalChanges) {
        // try push local changes to remote repository
        showMessage('Try push local changes...');
        EC::execute("git push origin $localBranch:$remoteBranch");
        if (EC::getStatus()) {
            throw new Exception(
                'Can\'t push local changes to remote repository'
            );
        }
    }

    // unlock and close lock file
    flock($fd, LOCK_UN);
    fclose($fd);
    showMessage('Complete!');


} catch (Exception $e) {
    $message = $e->getMessage();
    if ($canWriteLog) {
        file_put_contents(
            $logFile,
            "$dateTime: $message" . PHP_EOL,
            FILE_APPEND
        );
    }
    showMessage($message);
}
Дергать руками (и вписывать в крон) примерно так:
$ php /foo/bar/cron-backup.php

deep-purple ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.