• User

    Alternativa al cronjob

    Ciao a tutti,
    ho un file txt con dei valori che mi viene spedito sul server con un tempo che varia da 5 minuti a un'ora circa.
    Ho impostato un cronjop ogni ora, che attiva un file php e facendo il parsing del txt, inserisce i dati in un database MySQL.
    Funziona tutto correttamente, ma mi servirebbe aggiornare il database ad ogni cambiamento del file txt in tempo reale. Non vorrei impostare il cronjob ogni 5 minuti, penso possa sovraccaricare il server (cloud linux). Il sistema deve funzionare 24 su 24 anche quando nessuno sta visitando la pagina, quindi non posso utilizzare il long polling o simili. C'e' un'alternativa al cronjob?


  • User Attivo

    Puoi usare anche uno script php che ad intervalli regolari verifichi la data di modifica del file se non è variata non fai nulla. Altrimenti fa quello che ti serve. Naturalmente tutto in un loop lo avvi una volta e rimane in esecuzione sino a quando non riavvi il server o lo killi.


  • User

    Ciao linoma e grazie per la risposta.
    Il problema sono gli "intervalli regolari", di solito uso javascript, ma in questo caso non funzionerebbero.


  • User Attivo

    Il discorso è molto semplice, anche se sn convinto che a conti fatti è meglio cron, il programmino dovrebbe essere grosso modo questo :

    
    
    $t0 = 0;
    while(1){
        sleep(1*60*60); // 1 ora
        $t1 = filemtime($filename);
        $dt = $t1 - $t0;
        $t0 = $t1;
        if($dt != 0){
            parse_csv($filename);
        }
    }
    
    

    In più devi scrivere un'altro php che ti avvi e fermi il tuo script


  • User

    Sicuramente il cron e' la soluzione piu' comoda. Considera che dovrei inserire circa 100 record con 20 campi, impostando il cron ogni 5 minuti tutti i giorni 24 ore su 24, non pensi si potrebbe sovraccaricare il server? Questo e' il mio unico dubbio


  • User Attivo

    Ciao,
    se lo script eseguito da cron deve fare soltanto la verifica della data di un file, come suggerito da linoma, non è un gran carico per un server e puoi farlo girare anche ogni minuto. Meglio se lo script di verifica è in bash perché credo che sia più rapido del php, ma posso sbagliare.


  • User

    Ciao altraSoluzione,
    rivedendo e cercando di snellire il codice, lo script dovrebbe inserire 1 record con circa 130 dati ogni 5 minuti con il cron, dopo aver effettuato il controllo.
    Come già' detto il dubbio e' che il server vada in "blocco" e sarebbe un problema perché all'interno ci sono altri siti, compresi e-commerce.


  • User Attivo

    Io mi riferivo all'operazione di controllo senza inserimento dati. Cioè, se lo script parte, controlla se il file è cambiato ed esce, non causa un appesantimento sensibile del server.
    È chiaro che se, invece, lo script svolge un lavoro pesante perché ogni volta che parte al file sono state aggiunte centinaia di righe il discorso cambia.
    Però puoi anche pensare di dargli una bassa priorità e d'impedire, tramite dei lock file, che lo script parta di nuovo prima che il precedente abbia concluso il suo lavoro.