Tutorial > Come gestire processi Node.js con PM2 su CentOS 8

Come gestire processi Node.js con PM2 su CentOS 8

Pubblicato il: 24 settembre 2020

CentOS Node.js Sviluppo

PM2 è un gestore di processi in grado di eseguire le tue applicazioni Node.js come demoni all’interno del sistema, riavviando le tue applicazioni in caso di crash.

In questa guida vedremo come installare PM2 e configurarlo al meglio. Dopo aver creato una piccola applicazione di esempio con Node.Js, ti spiegheremo come avviarla, fermarla, e come gestire correttamente i suoi file di log.

Per iniziare dovrai connetterti al tuo server tramite una connessione SSH. Se non l’hai ancora fatto, ti consigliamo di seguire la nostra guida per connetterti in sicurezza con il protocollo SSH. In caso di server locale puoi passare al punto successivo e aprire il terminale del tuo server.

Prerequisiti

Se non è già presente sul tuo sistema, devi installare l’ultima versione stabile di Node.Js utilizzando i sesguenti comandi:

curl -sL https://rpm.nodesource.com/setup_12.x | sudo bash -

yum install nodejs -y

Verifica l’installazione, richiedendo la versione attualmente installata:

node -v
v12.18.3

Creazione di un applicativo di esempio

Per testare la le funzionalità di PM2, prepara un semplice applicativo che stampa su console la data attuale, in modo da verificare l’esecuzione del tuo software nel tempo.

Prima però è necessario creare una directory dove salvare l’applicazione: procedi quindi utilizzando i seguenti comandi:

mkdir /var/node/pm2test -p

Entra nella directory appena creata:

cd /var/node/pm2test 

Attraverso un editor di testo a tuo piacere crea un file “index.js”:

nano index.js

Inserisci nel file le seguenti istruzioni:

function writeToLogFile(){

 // Ottieni la data attuale
 currentDate = (new Date()).toISOString();
	
 // Stampa la data 
 console.log( `[${currentDate}] - Alive` );
}

// Richiama la funzione di sopra ogni secondo:
setInterval( writeToLogFile , 1000 );

Salva il file appena creato e verifica il suo funzionamento:

node index.js
[2020-09-01T10:02:15.789Z] - Alive
[2020-09-01T10:02:16.798Z] - Alive
[2020-09-01T10:02:17.800Z] - Alive

Interrompi l’esecuzione dello script utilizzando la combinazione di tasti CTRL + C.

Installazione di PM2 e primo avvio

PM2 è presente come pacchetto npm, ma per poterlo utilizzare in tutto il sistema, e non solo nella tua applicazione, utilizza il parametro “-g” per effettuare un’installazione globale:

npm install pm2 -g

Una volta completato, puoi avviare la tua applicazione utilizzando il comando “start”:

pm2 start /var/node/pm2test/index.js

Se tutto funziona correttamente dovresti visualizzare il processo appena avviato, utilizzando il comando:

pm2 list

┌─────┬──────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id  │ name     │ namespace   │ version │ mode    │ pid      │ uptime │ ↺    │ status    │ cpu      │ mem      │ user     │ watching │
├─────┼──────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0   │ index    │ default     │ N/A     │ fork    │ 6554     │ 0s     │ 0    │ online    │ 0%       │ 25.7mb   │ root     │ disabled │
└─────┴──────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘

Attraverso il comando “list”, PM2 ti permette di visualizzare tutti i processi attualmente attivi, il loro consumo delle risorse di sistema e molte altre informazioni.

Procedi quindi eliminando tutti i processi presenti, utilizzando il comando:

pm2 delete all

Utilizzo avanzato di PM2

Per identificare meglio il processo nella lista di PM2, puoi utilizzare il parametro “name” per assegnare un identificativo alla tua applicazione.

Ad esempio, avviando l’applicazione di test attraverso:

pm2 start /var/node/pm2test/index.js --name pm2test

Puoi successivamente fermarla utilizzando il comando “delete” abbinato allo stesso nome “pm2test” usato sopra:

pm2 delete pm2test

Attraverso il parametro “watch”, PM2 avvierà l’applicazione controllando che ci siano modifiche nella directory: nel momento in cui rileverà dei cambiamenti, riavvierà automaticamente il processo.

In questo caso quindi avremo:

pm2 start /var/node/pm2test/index.js --watch

Un’altro importante parametro è “log”, che ti permette di indicare dove verrà salvato l’output della tua applicazione e avere un maggiore controllo sul file, ad esempio utilizzando logrotate.

Unendo tutti i parametri precedentemente indicati, avvia l’applicazione tramite:

pm2 start /var/node/pm2test/index.js --name pm2test --watch --log /var/log/pm2test.log

Controllo del file di log tramite logrotate

Spesso i file di log possono raggiungere dimensioni eccessive e occupare buona parte dello spazio su disco.

Per evitare questo problema, puoi utilizzare logrotate per effettuare la rotazione del file di log e indicare quando e come devono essere scartate informazioni ormai vecchie.

Per aggiungere un nuovo file di log, crea tramite un editor di testo un nuovo file nella directory /etc/logrotate.d:

nano /etc/logrotate.d/pm2test

Inserisci quindi le seguenti istruzioni e salva il file appena creato:

/var/log/pm2test.log {
        rotate 3
        size 20M
}

Dopo aver salvato il file di configurazione, logrotate inizierà a controllare periodicamente il file “/var/log/pm2test.log”: nel caso in cui dovesse superare i 20 Megabytes, cambierà il nome del log in “pm2test.log.1” per iniziarne uno nuovo.

Se il numero totale di file salvati supererà 3, logrotate eliminerà i vecchi file per far spazio ai nuovi.