на drupal.org нашел способ автоочистки личных сообщений старше чем... с помощью крон.
Перевод:
Нужно следующий скрипт заставить исполнятся при запуске крона. Он использует функцию в модуле PM, которая устанавливает поле pm_index.deleted для сообщения на "1", определяя его статус как "удаленное". Если этот статус установлен, сообщение в дальнейшем будет удалено функцией "Flush deleted messages" (Очистить удаленные сообщения) согласно установкам модуля PM при запуске крона.
<?php
$sql = 'SELECT mid FROM {pm_message} WHERE timestamp < %d';
// Messages older than $timestamp are deleted, example, 90 days ago.
$timestamp = time() - (90 * 86400);
$result = db_query($sql, $timestamp);
// Fetch over all found messages and mark them as deleted
while ($row = db_fetch_object($result)) {
privatemsg_message_change_delete($row->mid, TRUE);
}
?>
Если старых сообений очень много, может возникнуть необходимость ограничить количество обрабатываемых сообщений, по крайней мере первые несколько запусков крона. В таком случае следует использовать функцию "db_query_range" вместо "db_query". Например:
<?php
$result = db_query_range($sql, $timestamp, 0, 500); // limit to 500 per run
?>
Вопрос к знатокам - как запустить этот скрипт? Как я понимаю, надо создать простенький модуль, назовем его напр. pmcleaner. В общем алгоритм описан - создаем описание в pmcleaner.info по правилам друпала и сам скрипт помещаем в файл pmcleaner.module.