Столкнулся с проблемой следующего характера — при настройке стандартного резервного копирования в облаке Битрикс и установке -> удалять в случае если кол-во копий больше N, если копия не ушла в облако по каким то причинам, она остается на сервере, что в свою очередь захломляет пространство. Чтобы обойти этот момент — написал простой агент, который можно вешать раз в день, он будет в свою очередь удалять лишние копии, выбирает конечно же самые старые.
function removeBackup() { define('DOCUMENT_ROOT', rtrim(str_replace('\\','/',$_SERVER['DOCUMENT_ROOT']),'/')); define("BX_ROOT", "/bitrix"); $arFiles = array(); $arTmpFiles = array(); if (is_dir($p = DOCUMENT_ROOT.BX_ROOT.'/backup')) { if ($dir = opendir($p)) { while(($item = readdir($dir)) !== false) { $f = $p.'/'.$item; if (!is_file($f)) continue; $arTmpFiles[] = array( 'NAME' => $item, 'SIZE' => filesize($f), 'DATE' => filemtime($f), 'BUCKET_ID' => 0, 'PLACE' => GetMessage("MAIN_DUMP_LOCAL") ); } closedir($dir); } } $arParts = array(); $arSize = array(); $arDates = array();$arDates['test'] = 'test'; $i=0; foreach($arTmpFiles as $k=>$ar) { if (preg_match('#^(.*\.(enc|tar|gz|sql))(\.[0-9]+)?$#',$ar['NAME'],$regs)) { $i++; $BUCKET_ID = intval($ar['BUCKET_ID']); $arParts[$BUCKET_ID.$regs[1]]++; $arSize[$BUCKET_ID.$regs[1]] += $ar['SIZE']; if (!$regs[3]) { if ($by == 'size') $key = $arSize[$BUCKET_ID.$regs[1]]; elseif ($by == 'timestamp') $key = $ar['DATE']; elseif ($by == 'location') $key = $ar['PLACE']; else // name $key = $regs[1]; $key .= '_'.$i; $arFiles[$key] = $ar; $arDates[$key] = $ar['DATE']; } } } $state = 2; // количество копий которое должно остаться asort($arDates); // Отсортировали по дате в порядке возрастанаия вверху самые старые if (count($arFiles) > $state) { foreach ($arDates as $dumpKey => $date) { $founded = $arFiles[$dumpKey]; if (!empty($founded['NAME'])) { foreach ($arParts as $key => $val) { if (strstr($key, $founded['NAME']) !== false) { $partsCount = $val; break; } } $backPath = DOCUMENT_ROOT.BX_ROOT.'/backup/'; for ($i = 1; $i < $partsCount; $i++) { $filePath = $backPath.$founded['NAME'].'.'.$i; if (file_exists($filePath)) { unlink($filePath); } } unlink($backPath.$founded['NAME']); } } } return 'removeBackup();'; }