Utilizzo e sviluppo dei demoni con itaDaemon

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.

Creazione di un demone

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

Creazione della classe *Daemon.class.php

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:

executeStart($args) Il metodo viene eseguito ad ogni ciclo di esecuzione del demone

executeStop($args) Il metodo viene eseguito una sola volta, alla distruzione del demone, ovvero quando questo viene fermato o nel caso avvenga un'eccezione.

getSleepTime() questa funzione dovrà semplicemente restituire un integer che rappresenta il tempo in secondi fra un'esecuzione di executeStart e la successiva.

n.b. Un crash completo del demone (come ad esempio quello provocato da un sigkill) non porta all'esecuzione di executeStop.

Configurazione del file autostart.ini

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:

Ogni sezione rappresenta un demone, con il nome della sezione che deve assumere il nome del demone

All'interno di ogni sezione sono presenti due parametri:

autostart: può assumere valore true o false ed indica se il demone parte automaticamente all'avvio del servizio di gestione

parameters: sono parametri aggiuntivi che vengono passati sia alla creazione che alla distruzione del demone. E' possibile passare più parametri dividendoli dal carattere di pipe ( | )

Per fare in modo che la coda giri come servizio, è opportuno scrivere un apposito daemon e registrarlo nel sistema come servizio. Per creare un nuovo daemon, basta semplicemente creare una nuova classe in /daemon/daemons/ con la seguente nomenclatura:

<nome-daemon>Daemon.class.php.

I metodi da implementare sono:

executeStart: Metodo che viene invocato ad ogni iterazione.

executeStop: Metodo che viene invocato allo stop del servizio.

getSleepTime: Restituisce il numero di secondi di inattività tra un'iterazione e l'altra.

Configurazione

Oltre alla creazione del demone sotto forma di classe PHP risulta necessario inserire il demone appena creato nel file di configurazione /daemon/config/autostart.ini Ogni sezione del file di configurazione rappresenta un demone. Per ogni demone sono presenti due chiavi:

autostart può essere impostata a true o false e indica se il demone va lanciato automaticamente dallo script /daemon/itaDaemonAutostart.php

parameters sono i parametri addizionali da inviare al demone, possono essere definiti più parametri usando il carattere di pipe | come divisore.

Servizio

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