Detta skript ska köras som ett cron-jobb på ditt cPanel-webbhotell.
Detta är inte den perfekta lösningen (eftersom ingen sådan finns) – det är snarare en tillfällig lösning, eftersom det inte åtgärdar de faktiska problemen. Vad skriptet gör är att hantera symptomen (hängande processer) genom att skicka dem en SIGTERM-signal så att de avslutas – och därmed frigör låsta resurser – vilket skapar stabilitet kring den NodeJS-app som är hostad på webbhotellet.
Syfte
Att köra NodeJS-applikationer i en cPanel-miljö är lite annorlunda än att köra NodeJS-appar lokalt. Processer kan misslyckas och få cPanels processkontrollsystem att starta en ny NodeJS-instans – eller processer som borde ha avslutats hänger kvar som ”spökprocesser”. Detta kan till slut förbruka alla resurser tills cPanels Resource Monitor blockerar vidare användning.
cleanup_orphans.sh [options] 'SEARCHSTRING'
Alternativ:
-v Verbose
-d Dry-run - visa avsett beteende men gör inga ändringar
-f Force kill - använd SIGKILL istället för SIGTERM
-h Help (detta hjälpmeddelande)
Standard SEARCHSTRING: 'lsnode:/home/$USER/'
Om det körs utan 'SEARCHSTRING' går skriptet igenom den interna
arrayen av domäner (mappnamn som läggs till i söksträngen), för att
städa upp varje 'domän' separat, en i taget.
Om skriptet anropas med 'SEARCHSTRING' som indata, ersätts den fördefinierade SEARCHSTRING med den angivna indata.
Annars går skriptet igenom den interna arrayen av domäner (mappnamn som läggs till i söksträngen) för att städa upp varje ”domän” separat, en i taget.
Loggning
Loggning är implementerad för att ha en historik – så att man kan följa hur många processer som har hanterats. Samtidigt kan för mycket loggning skapa ett nytt problem; vi vill inte att disken ska ta slut på utrymme på grund av oändlig loggning. Lösningen är att begränsa loggningen till två filer, som vardera kan innehålla upp till 1000 rader.
Implementering i en specifik cPanel-lösning.
Implementering i en specifik cPanel-lösning
- Kopiera skriptet ”as is” till en lokal disk.
- Skriptet har denna associativa array som innehåller rotmappnamnen för alla Node.js-appar som hostas på cPanel:
Redigera arrayen i din favoritredigerare så att den passar din specifika webbhotellslösning.declare -A domains domains[1]='mydomain.com' domains[2]='api.mydomain.com' domains[3]='dev.mydomain.com' domains[4]='test.mydomain.com'
- Bekräfta att SEARCHSTRING faktiskt innehåller det du vill att skriptet ska söka efter:
SEARCHSTRING="lsnode:/home/$USER/"
- Justera loggstorleken om du vill. Detta är den del som hanterar loggstorlek och rotation av loggfiler (jag går inte in på detaljer här):
# rotate log - håll loggstorleken inom en acceptabel gräns LOGSIZE=$(cat $LOGDIR/$LOGFILE | wc -l) if [ $LOGSIZE -gt 1000 ]; then mv -f $LOGDIR/$LOGFILE $LOGDIR/$LOGFILE.1 fi
- Justera LOGDIR om du vill – den är för närvarande inställd på att logga i skriptets mapp.
- Skapa en mapp på ditt webbhotell för att lagra egna skript – till exempel:
/cronscripts
. - Kopiera det anpassade
cleanup_orphans.sh
till webbhotellsmappen:/cronscripts/cleanup_orphans.sh
. - Lägg till ett cron-jobb i cPanel. Jag föreslår att du kör skriptet regelbundet, till exempel var 5–30:e minut (beroende på trafikmängden som skapar ”föräldralösa” processer).
Exempel:*/5 * * * * /home/infoqrco/cronscripts/cleanup_orphans.sh
- Övervaka den första körningen; prova eventuellt flaggorna -v (verbose) och -d (dry-run). Kontrollera att loggfilen skapas och verifiera att cron-jobbet körs som förväntat.
Klart! Dina ”föräldralösa” Node.js-processer hanteras nu automatiskt.
Originalguide skapad av en av våra smarta kunder ;-) : https://github.com/jlmantov/shellscripts/blob/main/docs/cleanup_orphans.md