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();).

9 thoughts on “Cron senza crontab: è possibile.

  1. 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);
    }

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

      1. 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 …

    2. 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!

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

    Ciao e grazie
    maurizio

    1. 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…

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

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

Leave a Reply to diego Cancel reply

Your email address will not be published.