В связи с появлением прекрасного модуля бэкапа, перезагрузки циклов МДМ раз в сутки, возникла некоторая проблема с файлом 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
если где какое свойство нужно сократить без уменьшения периода хранения, старайтесь использовать фильтры - при записи данного свойства
Наверняка, знающие, могут что-либо поправить и подсказать, комментарии приветствуются.
Нижний Тагил, Россия
На форуме: Logrus