Как можно осуществить такой запрос средствами Drupal?
TRUNCATE `cache`;
TRUNCATE `cache_block`;
TRUNCATE `cache_browscap`;
TRUNCATE `cache_content`;
TRUNCATE `cache_filter`;
TRUNCATE `cache_form`;
TRUNCATE `cache_menu`;
TRUNCATE `cache_page`;
TRUNCATE `cache_update`;
TRUNCATE `cache_views`;
TRUNCATE `cache_views_data`;
TRUNCATE `cache_block`;
TRUNCATE `cache_browscap`;
TRUNCATE `cache_content`;
TRUNCATE `cache_filter`;
TRUNCATE `cache_form`;
TRUNCATE `cache_menu`;
TRUNCATE `cache_page`;
TRUNCATE `cache_update`;
TRUNCATE `cache_views`;
TRUNCATE `cache_views_data`;
БД из-за кеша растет очень быстро. Стандартная очистка кеша работает неудовлетворительно. Каждый день получаю предупреждения хостера об достижении лимита на размер базы.
Комментарии
Если Drupal'ом то так:
TRUNCATE cache;
TRUNCATE cache_block;
TRUNCATE cache_browscap;
TRUNCATE cache_content;
TRUNCATE cache_filter;
TRUNCATE cache_form;
TRUNCATE cache_menu;
TRUNCATE cache_page;
TRUNCATE cache_update;
TRUNCATE cache_views;
TRUNCATE cache_views_data;
");
Более подробно тут или тут.
Ну вот я создал, к примеру, в корне файл для запуска очистки: truncate-cache.php
Что должно быть в нем, кроме указанной db_query(); ?
если "truncate-cache.php" на ходится в корне, то так:
// Для работы с базой
drupal_bootstrap(DRUPAL_BOOTSTRAP_DATABASE);
// Если нужно прям совсем все то:
// drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
db_query("
TRUNCATE cache;
TRUNCATE cache_block;
TRUNCATE cache_browscap;
TRUNCATE cache_content;
TRUNCATE cache_filter;
TRUNCATE cache_form;
TRUNCATE cache_menu;
TRUNCATE cache_page;
TRUNCATE cache_update;
TRUNCATE cache_views;
TRUNCATE cache_views_data;
");
Ничего не происходит
Всмысле ?! Выполни скрипт и посмотри содержание таблиц.
if(!file_exists('./includes/bootstrap.inc')){
print "exit";
exit();
}
require_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_DATABASE);
db_query("TRUNCATE cache_content;");
print "cleaned";
?>
Сейчас только выполнил и таблица очистилась.
Это понятно, т.к код выполняется в теле ноды. оно вам надо?! если разницы нет, то остовляйте ноде.
Спасибо большое. Очистилось
Да, не вопрос!)
А если это в ноду впихнуть, и сделать неопубликованной. Тогда при загрузке странички будет выполняться ваш код
Если в код страницы вставить такое:
db_query("
TRUNCATE cache;
TRUNCATE cache_block;
TRUNCATE cache_browscap;
TRUNCATE cache_content;
TRUNCATE cache_filter;
TRUNCATE cache_form;
TRUNCATE cache_menu;
TRUNCATE cache_page;
TRUNCATE cache_update;
TRUNCATE cache_views;
TRUNCATE cache_views_data;
");?>
то ничего не выполняется. ЧЯДНТ?
p.s. перед cache естественно еще стоит префикс таблицы
Кстати, интересует такой момент!
Как это ещё заставить выполняться по крону (доступа к crontab нет, но стоит модуль его заменяющий).
обращаться с другой машины в которой есть крон, ставите время на команду для обращения к http://www.ваш_адрес.ru/cron.php, если таковое отсутствует то планировщик задач)
предварительно дополнив .htaccess:
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
Allow from ваш_ip или доменное_имя
</Files>
Нашел другой вариант
Я процесс в фоне (через ssh) запустил, и поставил слип на 24 часа в бесконечном цикле
Изврат, но как временный выход вполне, до перезагрузки))
Ну у меня тоже вариант: на машине с линуксом на борту, работающей круглосуточно, по крону выполняю такой скрипт:
/usr/bin/lynx -source http://my.site.com/cron.php > /dev/null 2>&1
Спасибо! Помогло.
полезный пост