Dit script moet draaien als een cron-job op je cPanel-webhostingaccount.
Dit is niet de perfecte oplossing (omdat die niet bestaat) – het is eerder een tijdelijke workaround, omdat het de daadwerkelijke problemen niet oplost. Wat het script doet, is de symptomen (hangende processen) afhandelen door ze een SIGTERM-signaal te sturen zodat ze stoppen – en daarmee vergrendelde resources vrij te geven – wat stabiliteit creëert rond de NodeJS-app die op het webhostingaccount draait.
Doel
Het draaien van NodeJS-applicaties in een cPanel-gehoste omgeving is wat anders dan het lokaal draaien van NodeJS-apps. Processen kunnen falen en ervoor zorgen dat het procescontrolesysteem van cPanel een nieuwe NodeJS-instantie herstart – of processen die beëindigd hadden moeten zijn, blijven hangen als “spookprocessen”. Uiteindelijk kan dit alle resources verbruiken totdat de Resource Monitor van cPanel verder gebruik blokkeert.
cleanup_orphans.sh [options] 'SEARCHSTRING'
Options:
-v Verbose
-d Dry-run - toon beoogd gedrag maar raak niets aan
-f Force kill - gebruik SIGKILL in plaats van SIGTERM
-h Help (dit gebruiksbericht)
Standaard SEARCHSTRING: 'lsnode:/home/$USER/'
Indien aangeroepen zonder 'SEARCHSTRING', loopt het script door de interne
array van domeinen (mapnamen toegevoegd aan de zoekstring), om elk
'domein' afzonderlijk, één voor één, op te ruimen.
Als het script wordt aangeroepen met 'SEARCHSTRING' als invoer, wordt de vooraf gedefinieerde SEARCHSTRING vervangen door de opgegeven invoer.
Anders doorloopt het script de interne array van domeinen (mapnamen die aan de zoekstring worden toegevoegd) om elk “domein” afzonderlijk, één voor één, op te ruimen.
Logging
Logging is geïmplementeerd om een historiek bij te houden – zodat je kunt volgen hoeveel processen worden afgehandeld. Tegelijkertijd kan te veel logging een nieuw probleem creëren; we willen niet dat de schijf volloopt door eindeloze logging. De oplossing is om de logging te beperken tot twee bestanden, die elk maximaal 1000 regels kunnen bevatten.
Implementatie in een specifieke cPanel-oplossing.
Implementatie in een specifieke cPanel-oplossing
- Kopieer het script “as is” naar een lokale schijf.
- Het script heeft deze associatieve array, die de rootmapnamen bevat van alle cPanel-gehoste Node.js-apps:
Bewerk de array in je favoriete editor zodat het past bij je specifieke webhosting-oplossing.declare -A domains domains[1]='mydomain.com' domains[2]='api.mydomain.com' domains[3]='dev.mydomain.com' domains[4]='test.mydomain.com'
- Controleer dat SEARCHSTRING daadwerkelijk bevat waar je het script naar wilt laten zoeken:
SEARCHSTRING="lsnode:/home/$USER/"
- Pas de loggrootte aan indien gewenst. Dit is het gedeelte dat de loggrootte en rotatie van logbestanden regelt (ik ga hier niet in detail op in):
# rotate log - houd loggrootte binnen een acceptabele limiet LOGSIZE=$(cat $LOGDIR/$LOGFILE | wc -l) if [ $LOGSIZE -gt 1000 ]; then mv -f $LOGDIR/$LOGFILE $LOGDIR/$LOGFILE.1 fi
- Pas LOGDIR aan indien gewenst – het is momenteel ingesteld om te loggen in de map van het script.
- Maak een map aan op je webhosting om je eigen scripts op te slaan – bijvoorbeeld:
/cronscripts
. - Kopieer het aangepaste
cleanup_orphans.sh
naar de webhostingmap:/cronscripts/cleanup_orphans.sh
. - Voeg een cron-job toe in cPanel. Ik stel voor om het script regelmatig uit te voeren, bijvoorbeeld elke 5–30 minuten (afhankelijk van de hoeveelheid verkeer die “wees”-processen veroorzaakt).
Voorbeeld:*/5 * * * * /home/infoqrco/cronscripts/cleanup_orphans.sh
- Monitor de eerste uitvoering; probeer eventueel de vlaggen -v (verbose) en -d (dry-run). Controleer dat het logbestand wordt aangemaakt en verifieer dat de cron-job werkt zoals verwacht.
Klaar! Je “wees”-Node.js-processen worden nu automatisch afgehandeld.
Originele gids gemaakt door een van onze slimme klanten ;-) : https://github.com/jlmantov/shellscripts/blob/main/docs/cleanup_orphans.md