Denne skriptet bør kjøres som en cron-jobb på din cPanel webhotellkonto.
Dette er ikke den perfekte løsningen (siden ingen finnes) – det er heller en midlertidig løsning, da det ikke løser de faktiske problemene. Det skriptet gjør er å håndtere symptomene (hengende prosesser) ved å sende dem et SIGTERM-signal for å få dem til å avslutte – og dermed frigjøre låste ressurser – noe som skaper stabilitet rundt NodeJS-appen som er hostet på webhotellet.
Formål
Å kjøre NodeJS-applikasjoner i et cPanel-hostet miljø er litt annerledes enn å kjøre NodeJS-apper lokalt. Prosesser kan feile og føre til at cPanels prosesskontrollsystem starter en ny NodeJS-instans – eller prosesser som skulle ha avsluttet kan bli sittende fast som “spøkelsesprosesser”. Til slutt kan dette bruke opp alle ressurser til cPanels ressursmonitor blokkerer videre bruk.
cleanup_orphans.sh [options] 'SEARCHSTRING'
Options:
-v Verbose
-d Dry-run - vis tiltenkt oppførsel, men ikke gjør noe
-f Tvangsavslutt - bruk SIGKILL i stedet for SIGTERM
-h Hjelp (denne bruksbeskjeden)
Standard SEARCHSTRING: 'lsnode:/home/$USER/'
Hvis skriptet kalles uten 'SEARCHSTRING', går det gjennom den interne
arrayen av domener (mappenavn lagt til søkestrengen), for å rydde opp i hvert
'domene' separat, ett etter ett.
Hvis skriptet kalles med 'SEARCHSTRING' som input, vil den forhåndsdefinerte SEARCHSTRING bli erstattet med den oppgitte inputen.
Ellers vil skriptet iterere gjennom den interne arrayen av domener (mappenavn lagt til søkestrengen) for å rydde opp i hvert “domene” separat, ett om gangen.
Logging
Logging er implementert for å ha en historikk – slik at du kan spore hvor mange prosesser som håndteres. Samtidig kan for mye logging skape et nytt problem; vi ønsker ikke at disken skal gå tom for plass på grunn av endeløs logging. Løsningen er å begrense loggføringen til to filer, som hver kan inneholde opptil 1000 linjer.
Implementering i en spesifikk cPanel-løsning.
Implementering i en spesifikk cPanel-løsning
- Kopier skriptet “som det er” til en lokal disk.
- Skriptet har denne assosiative arrayen, som inneholder rotmappenavnene til alle cPanel-hostede Node.js-apper:
Rediger arrayen i din foretrukne editor slik at den passer til ditt spesifikke webhotelloppsett.declare -A domains domains[1]='mydomain.com' domains[2]='api.mydomain.com' domains[3]='dev.mydomain.com' domains[4]='test.mydomain.com' - Bekreft at SEARCHSTRING faktisk inneholder det du vil at skriptet skal lete etter:
SEARCHSTRING="lsnode:/home/$USER/" - Juster loggstørrelsen hvis du ønsker det. Dette er delen som håndterer loggstørrelse og rotasjon av loggfiler (Jeg går ikke inn på detaljer her):
# roter logg - oppretthold loggstørrelse innenfor akseptabel grense LOGSIZE=$(cat $LOGDIR/$LOGFILE | wc -l) if [ $LOGSIZE -gt 1000 ]; then mv -f $LOGDIR/$LOGFILE $LOGDIR/$LOGFILE.1 fi - Juster LOGDIR hvis du ønsker – den er for øyeblikket satt til å logge i skriptets mappe.
- Opprett en mappe på webhotellet ditt for å lagre dine egne skript – for eksempel:
/cronscripts. - Kopier det tilpassede
cleanup_orphans.shtil webhotellmappen:/cronscripts/cleanup_orphans.sh. - Legg til en cron-jobb i cPanel. Jeg anbefaler å kjøre skriptet regelmessig, f.eks. hvert 5.–30. minutt (avhengig av trafikkmengden som skaper “foreldreløse” prosesser).
Eksempel:*/5 * * * * /home/infoqrco/cronscripts/cleanup_orphans.sh - Overvåk første kjøring; prøv flaggene -v (verbose) og -d (dry-run). Sjekk at loggfilen blir opprettet, og bekreft at cron-jobben kjører som forventet.
Ferdig! Dine “foreldreløse” Node.js-prosesser håndteres nå automatisk.
Original guide laget av en av våre smarte kunder ;-) : https://github.com/jlmantov/shellscripts/blob/main/docs/cleanup_orphans.md