E' stata sviluppata in itaEngine un'infrastruttura che permette l'esecuzione di script in maniera continuativa simulando il comportamento di un demone Linux o di un servizio Windows.
Per creare un nuovo demone è necessario creare una nuova classe che estende la classe itaBaseDaemon ed impostare di conseguenza il file di configurazione dei demoni posto sotto /daemon/config/autostart.ini
Per creare un nuovo demone è necessario creare una classe che estende itaBaseDaemon. Tale classe deve avere come nome “<nome_demone>Daemon.class.php” ed essere inserita nel percorso “/daemon/daemons/*Daemon.class.php”. La classe deve implementare tre metodi:
E' inoltre possibile, ma non necessario, implementare i seguenti metodi:
n.b. Un crash completo del demone (come ad esempio quello provocato da un sigkill) non porta all'esecuzione di executeStop.
Oltre alla creazione della classe è necessario registrare il nuovo demone all'interno del file di configurazione “/daemon/config/autostart.ini” Il file di configurazione è strutturato in questo modo:
[dummy] label = 'Dummy daemon' autostart = false emailLog = CRITICAL parameters[] = 1 parameters[] = true parameters[] = "ciao" timeWarning = 180 timeError = 1800
E' possibile lanciare e controllare un demone fondamentalmente in tre modi differenti:
Per istanziare la classe di controllo dei demoni itaDaemonManager è sufficiente includere il file e creare un nuovo oggetto:
require_once ITA_BASE_PATH . '/daemon/lib/itaDaemonManager.class.php'; $daemonManager = new itaDaemonManager();
Una volta creato itaDaemonManager è possibile usarlo per gestire i demoni con i seguenti metodi:
$info = $daemonManager->getDaemonStatus('dummy');
$daemonManager->startDaemon('dummy',array('hello World'));
Ogni metodo di itaDaemonManager può causare una Exception, risulta dunque opportuno usare tali metodi in un blocco try-catch.
try{ $daemonManager->startDaemon($daemon); } catch(ItaException $e){ Out::msgStop("Errore", $e->getNativeErroreDesc()); } catch(Exception $e){ Out::msgStop("Errore", $e->getMessage()); }
La console di controllo dei demoni cwbDaemonConsole sfrutta tale metodo, se necessario implementare la gestione di un demone altrove si può usare tale implementazione come esempio.
Nota: I demoni sono gestiti in modo asincrono, l'invio di un comando ad un demone non è recepito in maniera istantanea ma può richiedere diversi secondi.
Risulta sufficiente impostare l'esecuzione dello script itaDaemonAutostart.php in esecuzione automatica all'avvio del sistema operativo o wrapparlo come servizio. Lo script al suo avvio si occuperà di censire tutti i demoni presenti nel file di configurazione autostart.ini, avviare i demoni che hanno la flag autostart=true e controllare in maniera ciclica lo stato dei demoni riavviando quelli che per qualche motivo vengono terminati in maniera errata (essenzialmente a seguito di un crash).
Il controllo dei demoni gestiti da itaDaemonAutostart può essere fatto tramite lo script itaDaemonController.php. In particolare lo script accetta questa sintassi: php itaDaemonController.php <demone> <comando> <parametri addizionali> dove comando può essere:
Inoltre se al posto del nome del demone verrà passata la string all il comando verrà eseguito per tutti i demoni (utile per avere lo status di tutti i demoni presenti, avviarli o fermarli tutti, etc). Esempio: php itaDaemonController.php all start
Nota: C'è possibilità di interscambio dei metodi di controllo, risulterà dunque possibile controllare tramite la classe itaDaemonManager un demone lanciato tramite itaDaemonAutostart e viceversa.
E' possibile wrappare un demone usando itaDaemonExecutor.php all'interno di un demone linux: Centos7: creazione di un nuovo script (/etc/systemd/system/testphp.service):
After=network.target [Service] Type=forking User=root ExecStart=/bin/bash /vagrant/system/start-daemon.sh par1 par2 ExecStop=/bin/bash /vagrant/system/stop-daemon.sh [Install] WantedBy=multi-user.target
start-daemon.sh:
php /vagrant/itaEngine/daemon/itaDaemonExecutor.php dummy start $1 $2 &
stop-daemon.sh:
php /vagrant/itaEngine/daemon/itaDaemonExecutor.php dummy stop
In maniera analoga a quanto fatto per linux è possibile procedere alla registrazione di un servizio Windows usando NSSM per wrappare lo script itaDaemonExecutor.php <demone> start come nell'immagine d'esempio.
Nota: A differenza che per i metodi precedenti il wrap dello script php in un demone/servizio potrebbe causare delle incompatibilità con gli altri metodi di controllo e non è stato testato. Mentre a livello teorico il sistema dovrebbe continuare a funzionare è raccomandabile non usare l'ultimo metodo descritto per dei demoni che si desida poter gestire tramite interfaccia grafica di itaEngine.
Nota: Il modo più robusto e compatibile per lanciare e gestire i demoni di itaEngine è effettuare il wrap di itaDaemonAutostart.php in un demone/servizio e poi controllare i demoni tramite la classe itaDaemonManager o tramite la riga di comando con itaDaemonController4 visualizzazioni.