Logrus

<<< Назад

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

В связи с появлением прекрасного модуля бэкапа, перезагрузки циклов МДМ раз в сутки, возникла некоторая проблема с файлом 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);
}

Дополнительно свой скрипт в сценариях (как пример):
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);
}
*/
safe_exec('rm /var/log/*.*');
safe_exec('rm /var/log/apache2/error.log.*');
//safe_exec('rm /var/log/apt/*.*');
//safe_exec('rm /var/log/exim4/mainlog.1');
safe_exec('rm /var/log/mpd/mpd.log.*');
safe_exec('rm /var/log/mysql/error.log.*');
//safe_exec('rm /var/log/samba/*.*');
safe_exec('rm /var/log/mosquitto/mosquitto.log.*.gz');

//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')) {
 runScript('restart');
}

скрипт/сценарий restart

$filename  = ROOT . '/database_backup/db.sql';
$mysqlDumpPath = '/usr/bin/mysqldump';
$mysqlDumpParam = ' --user=' . DB_USER . ' --password=' . DB_PASSWORD;
$mysqlDumpParam .= ' --no-create-db --add-drop-table --databases ' . DB_NAME;
if (file_exists($filename)) rename($filename, $filename . '.prev');
exec($mysqlDumpPath . $mysqlDumpParam . ' > ' . $filename);
setTimeout('restartTimer', "safe_exec('sudo service majordomo restart');", 1);

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

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

Обсуждение (0) (5)

Смотрите так же:
02.12.2019 Charts
30.11.2019 Шаблон поведения. Отправка сообщения на определенный терминал
30.06.2019 Телеграмм. Меню - управление группами ПУ
29.06.2019 Телеграмм. Меню - запуск скриптов (сценариев)
21.10.2018 Настройки громкости
07.10.2018 Примеры кода
29.09.2018 checkState
25.09.2018 Телеграмм. pChart
24.09.2018 Уход за базой данных
05.08.2018 Управление подсветкой на шлюзе Сяоми
21.06.2018 Каталог ссылок
10.06.2018 Меню
08.07.2018 mail()
04.05.2018 Режим "EnergyTariffMode"
02.05.2018 Класс SOpenClose метод logicAction (по-русски "Входная дверь")
22.04.2018 Программы
19.04.2018 Пользовательские функции
11.04.2018 Шаблон отображения в классе "ExchangeRates"
05.04.2018 Шаблон отображения в классе "Users"
02.12.2018 Режим "Никого нет дома"

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

На форуме: Logrus