Logrus

<<< Back

Бэкап и обслуживание системы

В связи с появлением прекрасного модуля бэкапа, перезагрузки циклов МДМ раз в сутки, возникла некоторая проблема с файлом startup_maintenance.php
Который вызывается при каждом старте системы (перезагрузка железа или циклов МДМ) и в котором происходит бэкап (уже не нужный и не нужных файлов в папку /var/www/html/backup которые должны удаляться с 10 дневным сроком жизни, чего не происходит), еще происходит очистка папки /var/www/html/debmes и должны чиститься (но увы) файлы в папке /var/www/html/cached и проверка БД.
Что бы пожалеть флешку, привел оный к такому виду

Оригинальный файл т.е. всегда можно обновить/отменить/восстановить как отдельно, так и все полностью через обновление системы.

Способов заменить на то что приведено ниже - множество, один из них WinSCP.
поправлено под последние изменения

<?php

/*
 * @version 0.1 (auto-set)
 */

DebMes("Running maintenance script");

if (!defined('LOG_FILES_EXPIRE')) {
 define('LOG_FILES_EXPIRE', 5);
}
if (!defined('CACHED_FILES_EXPIRE')) {
 define('CACHED_FILES_EXPIRE', 30);
}

//removing old log files
$dir = ROOT."cms/debmes/";
foreach (glob($dir."*") as $file) {
 if (filemtime($file) < time() - LOG_FILES_EXPIRE*24*60*60) {
  DebMes("Removing log file ".$file);
  @unlink($file);
 }
}

//removing old cached files
$dir = ROOT."cms/cached/";
foreach (glob($dir."*") as $file) {
 if (filemtime($file) < time() - BACKUP_FILES_EXPIRE*24*60*60) {
  DebMes("Removing cached file ".$file);
  @unlink($file);
 }
}

// CHECK/REPAIR/OPTIMIZE TABLES
$tables = SQLSelect("SHOW TABLES FROM `" . DB_NAME . "`");
$total = count($tables);

for ($i = 0; $i < $total; $i++)
{
   $table = $tables[$i]['Tables_in_' . DB_NAME];

   echo 'Checking table [' . $table . '] ...';

   if ($result = SQLExec("CHECK TABLE " . $table . ";"))
   {
      echo "OK\n";
   }
   else
   {
      echo " broken ... repair ...";
      SQLExec("REPAIR TABLE " . $table . ";");
      echo "OK\n";
   }
}

setGlobal('ThisComputer.started_time', time());
if (time()>=getGlobal('ThisComputer.started_time')) {
 SQLExec("DELETE FROM events WHERE ADDED > NOW()");
 SQLExec("DELETE FROM phistory WHERE ADDED > NOW()");
 SQLExec("DELETE FROM history WHERE ADDED > NOW()");
 SQLExec("DELETE FROM shouts WHERE ADDED > NOW()");
 SQLExec("DELETE FROM jobs WHERE PROCESSED = 1");
 SQLExec("DELETE FROM history WHERE (TO_DAYS(NOW()) - TO_DAYS(ADDED)) >= 5");
}

// CHECKING DATA
$sqlQuery = "SELECT pvalues.*, objects.TITLE as OBJECT_TITLE, properties.TITLE as PROPERTY_TITLE
               FROM pvalues
               JOIN objects ON pvalues.OBJECT_ID = objects.id
               JOIN properties ON pvalues.PROPERTY_ID = properties.id
              WHERE pvalues.PROPERTY_NAME != CONCAT_WS('.', objects.TITLE, properties.TITLE)";

$data = SQLSelect($sqlQuery);
$total = count($data);

for ($i = 0; $i < $total; $i++)
{
   $objectProperty = $data[$i]['OBJECT_TITLE'] . "." . $data[$i]['PROPERTY_TITLE'];

   if ($data[$i]['PROPERTY_NAME'])
      echo "Incorrect: " . $data[$i]['PROPERTY_NAME'] . " should be $objectProperty" . PHP_EOL;
   else
      echo "Missing: " . $objectProperty . PHP_EOL;

   $sqlQuery = "SELECT *
                  FROM pvalues
                 WHERE ID = '" . $data[$i]['ID'] . "'";

   $rec = SQLSelectOne($sqlQuery);

   $rec['PROPERTY_NAME'] = $data[$i]['OBJECT_TITLE'] . "." . $data[$i]['PROPERTY_TITLE'];

   SQLUpdate('pvalues', $rec);
}

Для справки, то что в системе "бэкапится", по умолчанию (все можно изменить под себя):

  1. Раз в час из темп Executing: cp -rf /tmp/mysql/* /var/lib/mysql
  2. Раз в 15 минут бэкап бд и сохранение предыдущего в /var/www/html/database_backup
  3. Бэкап отдельным модулем
  4. То что описано выше при старте/рестарте системы.

Наверняка, знающие, могут что-либо поправить и подсказать, комментарии приветствуются.

Discuss (0) (1)

Нижний Тагил, Россия

На форуме: Logrus