Tento skript by mal bežať ako cron úloha na vašom cPanel webhostingu.
Toto nie je dokonalé riešenie (keďže také neexistuje) – je to skôr dočasné obídenie problému, pretože nerieši samotné príčiny. To, čo skript robí, je spracovanie symptómov (zaseknutých procesov) tým, že im pošle signál SIGTERM, aby sa ukončili – a tým uvoľnili uzamknuté zdroje – čo prináša stabilitu pre NodeJS aplikáciu hostovanú na webhostingu.
Účel
Prevádzkovanie NodeJS aplikácií v prostredí hostovanom na cPaneli je trochu odlišné od spúšťania NodeJS aplikácií lokálne. Procesy môžu zlyhať a spôsobiť, že procesný kontrolný systém cPanelu reštartuje novú NodeJS inštanciu – alebo procesy, ktoré sa mali ukončiť, zostanú visieť ako „duchovné procesy“. Nakoniec to môže spotrebovať všetky zdroje, až kým Resource Monitor v cPaneli nezablokuje ďalšie použitie.
cleanup_orphans.sh [options] 'SEARCHSTRING'
Možnosti:
-v Verbose
-d Dry-run - ukáž zamýšľané správanie, ale nič nemen
-f Force kill - použi SIGKILL namiesto SIGTERM
-h Help (táto nápoveda)
Predvolený SEARCHSTRING: 'lsnode:/home/$USER/'
Ak je spustený bez 'SEARCHSTRING', skript prejde vnútorné
pole domén (názvy priečinkov pridané k vyhľadávaciemu reťazcu),
aby vyčistil každú 'doménu' zvlášť, jednu po druhej.
Ak je skript spustený s parametrom 'SEARCHSTRING', preddefinovaný SEARCHSTRING sa nahradí poskytnutým vstupom.
Inak skript prejde vnútorné pole domén (názvy priečinkov pridané k vyhľadávaciemu reťazcu), aby vyčistil každú „doménu“ osobitne, jednu po druhej.
Logovanie
Logovanie je implementované, aby existovala história – aby ste mohli sledovať, koľko procesov bolo spracovaných. Zároveň však príliš veľa logovania môže vytvoriť nový problém; nechceme, aby sa disk zaplnil kvôli nekonečnému logovaniu. Riešením je obmedziť logovanie na dva súbory, z ktorých každý môže obsahovať až 1000 riadkov.
Implementácia v konkrétnom cPanel riešení.
Implementácia v konkrétnom cPanel riešení
- Skopírujte skript „tak ako je“ na lokálny disk.
- Skript obsahuje toto asociatívne pole, ktoré obsahuje názvy koreňových priečinkov všetkých Node.js aplikácií hostovaných na cPaneli:
Upravte pole vo svojom obľúbenom editore tak, aby zodpovedalo vášmu konkrétnemu riešeniu webhostingu.declare -A domains domains[1]='mydomain.com' domains[2]='api.mydomain.com' domains[3]='dev.mydomain.com' domains[4]='test.mydomain.com'
- Overte, že SEARCHSTRING skutočne obsahuje to, čo chcete, aby skript hľadal:
SEARCHSTRING="lsnode:/home/$USER/"
- Prispôsobte veľkosť logu, ak chcete. Toto je časť, ktorá spracováva veľkosť logu a rotáciu log súborov (nepôjdem tu do detailov):
# rotate log - udržuj veľkosť logu v prijateľných medziach LOGSIZE=$(cat $LOGDIR/$LOGFILE | wc -l) if [ $LOGSIZE -gt 1000 ]; then mv -f $LOGDIR/$LOGFILE $LOGDIR/$LOGFILE.1 fi
- Upravte LOGDIR, ak chcete – momentálne je nastavený tak, aby zapisoval do priečinka skriptu.
- Vytvorte priečinok na svojom webhostingu na uloženie vlastných skriptov – napríklad:
/cronscripts
. - Skopírujte upravený
cleanup_orphans.sh
do priečinka webhostingu:/cronscripts/cleanup_orphans.sh
. - Pridajte cron úlohu v cPaneli. Odporúčam spúšťať skript pravidelne, napr. každých 5–30 minút (v závislosti od množstva prevádzky, ktorá vytvára „osirelé“ procesy).
Príklad:*/5 * * * * /home/infoqrco/cronscripts/cleanup_orphans.sh
- Sledujte prvé spustenie; vyskúšajte prípadne prepínače -v (verbose) a -d (dry-run). Skontrolujte, že log súbor bol vytvorený a overte, že cron úloha funguje podľa očakávania.
Hotovo! Vaše „osirelé“ Node.js procesy sú teraz spracovávané automaticky.
Pôvodný návod vytvoril jeden z našich múdrych zákazníkov ;-) : https://github.com/jlmantov/shellscripts/blob/main/docs/cleanup_orphans.md