loader

Codeigniter CLI: Eseguiamo lavori da linea di comando.

Come tutti sapranno un framework che si rispetti mette a disposizione la CLI (command line interface), la quale permette di richiamare comandi più o meno complessi.

A cosa servono?

Per semplicità soffermiamoci solo ad alcuni principali utilizzi:

  • Schedulazione
  • Worker
  • Caricamento dati

Immaginiamo, in questo semplice caso, di dover caricare dei dati nel database per fare il boot della nostra applicazione, la linea di comando potrebbe essere la via più facile e sicura.

Codeigniter come si comporta?

Niente di straordinario, semplicemente dobbiamo creare un Controller che estende CI_Controller con almeno un metodo pubblico da poter richiamare da linea di comando.

Seguendo l’esempio sopra potremmo creare un Controller “Bootapp” con all’interno un metodo pubblico “load_db()”, la sintassi risulta essere la seguente:

<?php

class Bootapp extends CI_Controller{

    public function __constructor(){
        parent::__contructor();
    }

    public function load_db(){
        //il nostro codice
    }
}

Nulla di complicato anzi, molto semplice e lineare così da non creare problemi a coloro che non sono addetti ai lavori.

Per richiamare da linea di comando:

$ cd /path/to/project;
$ php index.php bootapp load_db

Come possiamo notare è una sintassi tanto basilare quante brillante e semplice da usare.

Aspetti più complessi

Immaginiamo di dover eseguire un “lavoro” e/o “schedulazione” in determinate fasce orarie la CLI è la nostra ancora di salvezza in quanto verranno eseguiti i lavori in modo del tutto autonomo.

Un caso più concreto è l’invio massivo delle mail, infatti è impensabile inviare 100/200 email in modo sincrono, si potrebbe andare incontro ad un salto di rete, black out, timeout del server e così via…

In questo caso è buona norma memorizzare i parametri e/o il corpo email nel Database e richiamare in un task separato l’invio delle mail, così da scongiurare possibili anomalie.

In questo modo non dovremo inviare blocchi di 100/200 email simultaneamente ma attraverso uno scheduler potremo inviare ogni 5 minuti blocchi di 10/20 email così da non appesantire il nostro server.

NB: I 5 minuti e 10/20 email sono parametri che utilizzi normalmente e che sono quindi dettati dal buon senso e dalla gestione di più task e code.

Alcuni consigli

Sfruttare a pieno il framework significa “Capire”, “Interpretare”, “Implementare” e “Eseguire” nel modo più appropriato un determinato task, in questo caso ricordo che per buona norma e prassi si dovrebbe prevedere:

  • Una tabella nel DB per la memorizzazione dei lanci da CLI con esito (per es: true/false), l’orario e il task elaborato.
  • Prevedere un blocco per non accavallare i task ed i job
  • Separazione dei task e dei job (queue) così da avviare più processi in parallelo
  • Un log per i nostri task
  • Un advisor che effettui una sintesi giornaliera/settimanale/mensile in base alle proprie specifiche.