Ce script doit être exécuté comme une tâche cron sur votre hébergement web cPanel.
Ce n’est pas la solution parfaite (car elle n’existe pas) – c’est plutôt une solution temporaire de contournement, car elle ne résout pas les problèmes réels. Ce que fait le script, c’est gérer les symptômes (processus bloqués) en leur envoyant un signal SIGTERM afin de les forcer à se terminer – et ainsi libérer les ressources verrouillées – ce qui apporte de la stabilité à l’application NodeJS hébergée sur l’hébergement web.
Objectif
Exécuter des applications NodeJS dans un environnement hébergé sur cPanel est un peu différent de l’exécution locale de NodeJS. Les processus peuvent échouer et amener le système de contrôle de processus de cPanel à redémarrer une nouvelle instance de NodeJS – ou des processus qui auraient dû se terminer restent bloqués comme des « processus fantômes ». Cela peut finir par consommer toutes les ressources jusqu’à ce que le Resource Monitor de cPanel bloque toute utilisation supplémentaire.
cleanup_orphans.sh [options] 'SEARCHSTRING'
Options :
-v Verbose
-d Dry-run - afficher le comportement prévu sans rien modifier
-f Force kill - utiliser SIGKILL au lieu de SIGTERM
-h Help (ce message d’aide)
SEARCHSTRING par défaut : 'lsnode:/home/$USER/'
Si appelé sans 'SEARCHSTRING', le script parcourt le tableau interne
de domaines (noms de dossiers ajoutés à la chaîne de recherche), afin
de nettoyer chaque 'domaine' séparément, un par un.
Si le script est appelé avec 'SEARCHSTRING' comme paramètre, la SEARCHSTRING prédéfinie est remplacée par l’entrée fournie.
Sinon, le script parcourt le tableau interne de domaines (noms de dossiers ajoutés à la chaîne de recherche) pour nettoyer chaque « domaine » séparément, un par un.
Journalisation
La journalisation est mise en œuvre afin de disposer d’un historique – pour pouvoir suivre le nombre de processus traités. En même temps, une journalisation excessive peut créer un nouveau problème ; nous ne voulons pas que le disque se remplisse à cause d’une journalisation sans fin. La solution est de limiter la journalisation à deux fichiers, chacun pouvant contenir jusqu’à 1000 lignes.
Mise en œuvre dans une solution cPanel spécifique.
Mise en œuvre dans une solution cPanel spécifique
- Copiez le script « tel quel » sur un disque local.
- Le script contient ce tableau associatif, qui inclut les noms de dossiers racine de toutes les applications Node.js hébergées sur cPanel :
Modifiez le tableau dans votre éditeur préféré afin qu’il corresponde à votre solution d’hébergement spécifique.declare -A domains domains[1]='mydomain.com' domains[2]='api.mydomain.com' domains[3]='dev.mydomain.com' domains[4]='test.mydomain.com'
- Vérifiez que SEARCHSTRING contient bien ce que vous souhaitez que le script recherche :
SEARCHSTRING="lsnode:/home/$USER/"
- Ajustez la taille du journal si vous le souhaitez. Voici la partie qui gère la taille et la rotation des fichiers journaux (je ne vais pas entrer dans les détails ici) :
# rotate log - maintenir la taille du journal dans une limite acceptable LOGSIZE=$(cat $LOGDIR/$LOGFILE | wc -l) if [ $LOGSIZE -gt 1000 ]; then mv -f $LOGDIR/$LOGFILE $LOGDIR/$LOGFILE.1 fi
- Ajustez LOGDIR si vous le souhaitez – il est actuellement configuré pour enregistrer dans le dossier du script.
- Créez un dossier sur votre hébergement web pour stocker vos propres scripts – par exemple :
/cronscripts
. - Copiez le
cleanup_orphans.sh
personnalisé dans le dossier de l’hébergement :/cronscripts/cleanup_orphans.sh
. - Ajoutez une tâche cron dans cPanel. Je recommande d’exécuter le script régulièrement, par exemple toutes les 5 à 30 minutes (selon le volume de trafic qui crée des processus « orphelins »).
Exemple :*/5 * * * * /home/infoqrco/cronscripts/cleanup_orphans.sh
- Surveillez la première exécution ; essayez éventuellement les options -v (verbose) et -d (dry-run). Vérifiez que le fichier journal est créé et que la tâche cron fonctionne comme prévu.
Terminé ! Vos processus Node.js « orphelins » sont désormais gérés automatiquement.
Guide original créé par l’un de nos clients ingénieux ;-) : https://github.com/jlmantov/shellscripts/blob/main/docs/cleanup_orphans.md