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);
}

//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);
 }
}

// 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. То что описано выше при старте/рестарте системы.

Дополнительно свой скрипт в сценариях (как пример):
Maintenance

/*
//Optimize gps
$records = SQLSelect("SELECT ID, DEVICEID, LOCATION_ID FROM gpslog ORDER BY DEVICEID, ADDED DESC");
$total = count($records);
for($i=1; $i<$total-1; $i++) {
 if (!$records[$i]['LOCATION_ID']) {continue;}
 if ($records[$i]['LOCATION_ID'] == $records[$i+1]['LOCATION_ID'] && $records[$i]['LOCATION_ID'] == $records[$i-1]['LOCATION_ID']) {
  SQLExec("DELETE FROM gpslog WHERE ID=" . $records[$i]['ID']);
 }
}
*/

//Delete rss histori
SQLExec("DELETE FROM rss_items WHERE TO_DAYS(NOW())-TO_DAYS(ADDED)>1");

//Очистка лога событий (чат)
SQLExec("DELETE FROM shouts WHERE TO_DAYS(NOW())-TO_DAYS(ADDED)>2");

//filesClearBackups
$paths = array ('/var/backups/*.1.*');
foreach ($paths as $p) {
 safe_exec('rm ' . $p);
}

//filesClearLog
$paths = array ('/var/log/*.1');
foreach ($paths as $p) {
 safe_exec('rm ' . $p);
}

//shell_exec('sudo rm -f /var/log/*.*');
shell_exec('sudo rm -f /var/log/apache2/error.log.*');
shell_exec('sudo rm -f /var/log/apt/*.*');
//shell_exec('sudo rm -f /var/log/exim4/mainlog.1');
shell_exec('sudo rm -f /var/log/mpd/mpd.log.*');
shell_exec('sudo rm -f /var/log/mysql/error.log.*');
shell_exec('sudo rm -f /var/log/samba/*.*');

//filesClearOld
//keepLatestLimitedBySize('./media/webcam', 500*1024*1024); //500Mb
//keepLatestLimitedBySize('./media/webcam_sorted', 500*1024*1024); //500Mb
//keepLatestLimitedBySize('./backup', 350*1024*1024); //350Mb
keepLatestLimitedBySize('./cms/cached/voice', 50*1024*1024); //50Mb
keepLatestLimitedBySize('./cms/cached/urls', 3*1024*1024); //3Mb
keepLatestLimitedBySize('./cms/cached/templates_c', 100*1024); //100kb
keepLatestLimitedBySize('./cms/saverestore', 5*1024*1024); //5Mb

//LOG
SQLExec("update calendar_events set LOG=''");
SQLExec("update patterns set LOG=''");
SQLExec("update pinghosts set LOG=''");
//SQLExec("update webvars set LOG=''");

настроить под себя, запуск из Timer/ClockChime/onNewDay
runScript('Maintenance');

там же запуск рестарта циклов
if (getGlobal('Check.restart')) {
setTimeOut('restart', 'runScript(\'restart\');', 3);
}

запуск модуля optimizer каждый день Start time (HH): (*) 0
старайтесь по возможности выбирать OPTIMIZE: None
если где какое свойство нужно сократить при не изменении срока хранения, старайтесь использовать фильтры

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

Discuss (0) (2)

See also:
2018-08-05 Управление подсветкой на шлюзе Сяоми
2018-06-21 Каталог ссылок
2018-06-10 Меню
2018-07-08 mail()
2018-05-04 Режим "EnergyTariffMode"
2018-05-02 Класс SOpenClose метод logicAction (по-русски "Входная дверь")
2018-04-22 Программы
2018-04-19 Пользовательские функции
2018-04-11 Шаблон отображения в классе "ExchangeRates"
2018-04-05 Шаблон отображения в классе "Users"
2018-04-05 Режим "Никого нет дома"

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

На форуме: Logrus