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) (11)

Смотрите так же:
10.01.2021 DROP_TABLE
07.05.2020 Телеграмм. Полезное
30.06.2019 Телеграмм. Меню - управление группами ПУ
29.06.2019 Телеграмм. Меню - запуск скриптов (сценариев)
21.10.2018 Настройки громкости
07.10.2018 Примеры кода
25.09.2018 Телеграмм. pChart
02.05.2018 Класс SOpenClose метод logicAction (по-русски "Входная дверь")
05.04.2018 Шаблон отображения в классе "Users"
02.12.2018 Режим "Никого нет дома"

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

На форуме: Logrus