Script om Node.js-processen op te ruimen die jouw webhosting blokkeren

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

  1. Kopieer het script “as is” naar een lokale schijf.
  2. Het script heeft deze associatieve array, die de rootmapnamen bevat van alle cPanel-gehoste Node.js-apps:
    declare -A domains
    domains[1]='mydomain.com'
    domains[2]='api.mydomain.com'
    domains[3]='dev.mydomain.com'
    domains[4]='test.mydomain.com'
    Bewerk de array in je favoriete editor zodat het past bij je specifieke webhosting-oplossing.
  3. Controleer dat SEARCHSTRING daadwerkelijk bevat waar je het script naar wilt laten zoeken:
    SEARCHSTRING="lsnode:/home/$USER/"
  4. 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
  5. Pas LOGDIR aan indien gewenst – het is momenteel ingesteld om te loggen in de map van het script.
  6. Maak een map aan op je webhosting om je eigen scripts op te slaan – bijvoorbeeld: /cronscripts.
  7. Kopieer het aangepaste cleanup_orphans.sh naar de webhostingmap: /cronscripts/cleanup_orphans.sh.
  8. 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
  9. 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

  • 0 gebruikers vonden dit artikel nuttig
Was dit antwoord nuttig?

Geen oplossing gevonden?

Als je geen oplossing hebt gevonden door te zoeken of onze categorieën te doorbladeren, kun je een nieuw supportticket openen.

Open nieuw ticket

Gerelateerde artikelen

Hoe 503-fouten op je website te verhelpen

Een 503-fout treedt op wanneer er niet genoeg middelen beschikbaar zijn om een script uit te...

Hoe 503-fouten op te lossen tijdens het uploaden en importeren van gegevens

503 Fout: Hoe serverlimieten te overschrijden en op te lossenEen 503-fout is een serverprobleem...

Ik kan mijn eigen pagina's niet openen, maar anderen kunnen dat wel

Als je merkt dat je niet kunt inloggen op cPanel bij ons of je eigen pagina's niet kunt zien...

Zo beperk je de grootte van je error_log-bestanden

Elke keer dat er een PHP-fout optreedt op je site – of het nu slechts een waarschuwing is of een...