Node.js – Gestione dei processi con PM2
Node.js è considerata una delle piattaforme chiave per lo sviluppo di micro-servizi lato back-end.
Un micro-servizio è un processo autonomo che svolge task molto specifici per una data applicazione.
Gestirli al meglio è un aspetto cruciale per la buon riuscita di un progetto e il suo mantenimento.
PM2 è lettaralmente uno dei moduli più scaricati dal Node Packate Manager (NPM). Insieme a Express, Grunt, Gulp, Browserify, Cordova e altri. Nasce essenzialmente per la gestione dei processi. Permette di tenere le applicazioni perennemente in esecuzione, riavviarle nel caso di errori e addirittura effettuare operazioni di load-balancing fra più istanze del processo.
Vediamo assieme una lista dei comandi più utili e interessanti.
Avviare un’applicazione su PM2 è estremamente facile:
$ pm2 start app.js |
Con questo comando si esegue l’applicazione in background senza la necessità di dover usare nohup sui sistemi UNIX.
PM2 funziona in modo stabile su Linux e MacOSx, su Windows è in Beta.
L’installazione avviene dal gestore dei pacchetti di Node, NPM:
$ npm install pm2 -g |
Installa globalmente pm2.
$ pm2 save |
Salva la lista dei processi in esecuzione su pm2. E con:
$ pm2 startup |
Si fa si che al riavvio la lista dei processi venga lanciata nuovamente.
PM2 inoltre include un sistema di moduli per estenderne le proprie capacità attraverso plugin.
$ pm2 install <module_name> |
Altri comandi utili sono:
$ pm2 start app.js --name="nome-processo" |
che assegna un nome al processo appena avviato.
$ pm2 list |
che elenca sul terminale la lista dei processi gestiti da PM2 e lo stato in cui si trovano.
$ pm2 monit |
Monitora sul terminale CPU e memoria usati da ogni processo.
Ancora, altrettanto intuitivi sono i comandi per la gestione dei processi:
$ pm2 stop <app_name|id|'all'|json_conf> $ pm2 restart <app_name|id|'all'|json_conf> $ pm2 delete <app_name|id|'all'|json_conf> |
Per ottenere informazioni specifiche su un dato processo in esecuzione:
$ pm2 describe <id|app_name> |
Per visualizzare i log in tempo reale di ogni processo in esecuzione:
$ pm2 logs |
E’ anche possibile “guardare” i file dei processi e fare in modo che alla modifica di un file automaticamente venga riavviato il processo. Questo aggiungendo il flag --watch
durante l’avvio del processo:
$ pm2 start app.js --watch |
Eseguire script che vengano interpretati non solo da Node:
$ pm2 start my-python-script.py --interpreter python |
e passare parametri addizionali da CLI:
$ pm2 start app.js -- --parametro 123 |
PM2 essendo un progetto nato da Keymetrics.io è fortemente integrato con la loro Dashboard di controllo. E’ possibile con un singolo comando associare la propria istanza di PM2 ad un bucket e monitorare con la dashboard di keymetrics ogni processo in esecuzione su PM2. Stato, utilizzo di CPU, consumo di memoria, errori, logs generici e tanto altro.
Il pacchetto free di keymetrics attualmente restringe l’utilizzo ad 1 solo bucket ed 1 singolo server.
Motivo per cui inizialmente erano nati dei plugin come https://github.com/achingbrain/pm2-web per hostare direttamente la dashboard presso il proprio server, purtroppo pm2-web è un’interfaccia deprecata perchè aggiornamenti successivi di pm2 hanno adottato soluzioni architetturali differenti per favorire l’uso della loro interfaccia proprietaria.
In futuro si spera vengano “ammorbiditi” i limiti d’utilizzo per la dashboard.
Commenti