Cron senza crontab: è possibile.

|

Cari webmaster drupal in erba, questa è proprio per voi!

Far partire il cron.php regolarmente, senza avere accesso al server o senza saper gestire un server adesso è possibile!

Inserite queste semplici righe in PHP in un blocco qualunque di quelli che compaiono in modo fisso nelle vostre pagine oppure createne uno appositamente:

<?php
$tmstmp=mktime();
$last=file_get_contents("lastcron.txt");
if(($tmstmp-$last)>(60*60*6))
{
$pntr=fopen('lastcron.txt', 'w');
if(fwrite($pntr, $tmstmp))
{
mail ("dest","cron OK","OK");
include ("cron.php");
}
else
{
mail ("dest","cron FAIL","FAIL");
}
fclose($pntr);
}
?>

Ovviamente sostituite le righe con mail ("dest", con il vostro indirizzo email al posto di dest.

Poi è necessario creare un file di testo che si chiama lascron.txt (potete scriverci dentro quello che volete 123456 va benissimo) e caricarlo sul server nella stessa cartella del file cron.php di Drupal (normalmente la root del vostro accesso FTP). Poi impostate i permessi del file a 666 (rw,rw,rw): io l'ho fatto con FileZilla, click destro con il mouse, attributi, flag su scrittura per tutti... l'importante che sia fatto, il modo non è importante ;)

Fatto!

Il cron.php adesso partirà più o meno regolarmente a seconda di quanto è visitato il vostro sito e vi invierà una mail di conferma o di errore. Nel mio esempio cerco di lanciarlo al massimo ogni 6 ore e non più frequentemente: la riga è quella con (60*60*6), corrisponde ai secondi in 6 ore.

Per i pignoli aggiungo che nel database, tabella 'variable', il record con il campo 'name' uguale a "cron_last" ha nel campo 'value' un valore che può essere utilizzato al posto del meccanismo del file di testo, per il confronto con il timestamp attuale (alla prima riga mktime();).

test

prova - ignorare

Quello script è per 6

Quello script è per 6 ore...se volessi farlo per 1 minuto come si fa?

Grazie :)

Troppo frequente!

Per metterlo ogni minuto sostituisci 60*60*6 con 60.

Secondo me è troppo frequente, se hai un sito molto visitato lo rallenti parecchio....

Cron senza Crontab su Aruba

Questo metodo è realizzabile su hosting dove non si ha il controllo del server (come Aruba)?

Ciao e grazie
maurizio

La verità?

A dire il vero non so come gestisca gli hosting Aruba, ma penso proprio di si. Comunque mi avevano detto che per i drupal più recenti del mio post, ci sono dei moduli aggiuntivi che risolvono il problema. Credo si chiami "poormancrontab" o qualcosa del genere...

Forse così è meglio...

Credo che questa versione sia un po' meglio.
Ho anche corretto un errore nel documento originale, in fase di chiusura file...

$tmstmp=date("Y-m-d");
$last=file_get_contents("lastcron.txt");
if($tmstmp!=$last)
{
$pntr=fopen('lastcron.txt', 'w');
if(fwrite($pntr, $tmstmp))
{
mail ("dest","cron OK","OK");
include ("cron.php");
}
else
{
mail ("dest","cron FAIL","FAIL");
}
fclose($pntr);
}

Avviso in caso di successo

E' molto comoda questa funzione, però non ho capito perché si è scelto di inviare un'email ad ogni successo dell'operazione. Non è meglio essere avvisati solo quando le cose non funzionano? E poi in linea di massima dovrebbe funzionare senza problemi o è frequente che possa commettere errori? Grazie per questi trucchi, molto utili!

Informazione

Ciao io ho la necessitàdi automizzare il cron_job del mio sito. Potresti aiutarmi?
A presto!
Massimiliano

Automizzare?

Certo che ti aiuto, a patto che poi mi dai l'indirizzo del tuo "pusher", deve avere roba buona!

:)

Scherzo naturalmente!

Usa il modulo di contatto e mandami qualche dettaglio, altrimenti così senza informazioni è un po' difficile ...