Thumb Rule: Cron dovrebbe essere eseguito regolarmente per le pulizie del tuo sito web.
Nel tuo commento a MPD hai menzionato che, nonostante la configurazione di cron e l'esecuzione periodica, la tabella cache_form sta crescendo rapidamente.
Una soluzione è quella di eseguire il cron più frequentemente. Dire ogni sei ore o meno? Se non puoi permetterti di farlo, leggi oltre.
Soluzione alternativa:
mymodule_cron() {
cache_clear_all(NULL, 'cache_form');
}
Installa Elysia Cron e ora puoi eseguire la funzione cron del tuo modulo separatamente. Puoi mantenere la frequenza del cron Elysia affinché il tuo modulo funzioni ogni sei ore. In modo che la tua cache_form
tavola venga potata ogni sei ore.
Durante questo processo di potatura le voci non più vecchie di 6 ore non verranno eliminate. Il motivo è che, se tutte le voci vengono eliminate, tutti i moduli che vengono inviati al momento dell'eliminazione delle voci possono comportarsi in modo strano.
Guarda il codice in https://api.drupal.org/api/drupal/includes!form.inc/function/form_set_cache/7
function form_set_cache($form_build_id, $form, $form_state) {
// 6 hours cache life time for forms should be plenty.
$expire = 21600;
Mentre il commento legge stanno assumendo che dovrebbe essere abbondante e nel tuo caso sta diventando troppo per te. Quindi il trucco è cancellare la tabella cache_form più frequentemente e ridurre il valore di $ expire a un valore inferiore, se si desidera cancellare le voci cache_form più frequentemente del valore predefinito di 6 sei ore, è necessario modificare il TTL di le voci cache_form.
Puoi farlo installando cacheboject e quindi implementando hook_cacheobject_presave
entro il quale è possibile modificare il TTL in 2 o 3 ore.
mymodule_cacheobject_presave()($object, $cid, $bin) {
// Extend the expiry period for prototype forms used in ajax enabled forms.
$cache_ttl = 1 ; // Change it to any number of hours
if ($bin == 'cache_form') {
$object->expire = REQUEST_TIME + $cache_ttl * 3600;
}
}
Un aspetto negativo di questo approccio è se i moduli non vengono inviati entro 2 ore (il valore RTL impostato) i dati del modulo potrebbero andare persi e si potrebbero verificare problemi con i moduli scaduti.