Tento skript by měl být spuštěn jako cron úloha na vašem cPanel webhostingovém účtu.
Toto není dokonalé řešení (protože žádné neexistuje) – je to spíše dočasné řešení, protože neřeší skutečné problémy. Skript řeší symptomy (zaseknuté procesy) tím, že jim pošle signál SIGTERM, aby se ukončily – a tím uvolnily zablokované zdroje – což vytváří stabilitu kolem NodeJS aplikace hostované na webhostingu.
Účel
Spouštění NodeJS aplikací v prostředí hostovaném na cPanelu je trochu jiné než spouštění NodeJS aplikací lokálně. Procesy mohou selhat a způsobit, že systém řízení procesů cPanelu restartuje novou instanci NodeJS – nebo procesy, které měly skončit, mohou zůstat zaseknuté jako „duchové procesy“. Nakonec to může spotřebovat všechny zdroje, dokud monitor zdrojů cPanelu nezablokuje další použití.
cleanup_orphans.sh [options] 'SEARCHSTRING'
Options:
-v Verbose
-d Dry-run - show intended behaviour but don't touch anything
-f Force kill - use SIGKILL instead of SIGTERM
-h Help (this usage message)
Default SEARCHSTRING: 'lsnode:/home/$USER/'
If called without 'SEARCHSTRING', the script runs through the internal
array of domains (foldernames added to search string), to clean up each
'domain' separately, one by one.
Pokud je skript volán s 'SEARCHSTRING' jako vstupem, předdefinovaný SEARCHSTRING bude nahrazen poskytnutým vstupem.
Jinak skript projde interní pole domén (názvy složek přidané do vyhledávacího řetězce), aby vyčistil každou „doménu“ zvlášť, jednu po druhé.
Logování
Logování je implementováno, aby byla historie – takže můžete sledovat, kolik procesů je zpracováváno. Zároveň však příliš mnoho logování může vytvořit nový problém; nechceme, aby disk došel kvůli nekonečnému logování. Řešením je omezit logování na dva soubory, z nichž každý může obsahovat až 1000 řádků.
Implementace v konkrétním řešení cPanelu.
Implementace v konkrétním řešení cPanelu
- Zkopírujte skript „jak je“ na lokální disk.
- Skript má toto asociativní pole, které obsahuje kořenové názvy složek všech Node.js aplikací hostovaných na cPanelu:
Upravte pole ve svém oblíbeném editoru tak, aby odpovídalo vaší konkrétní konfiguraci webhostingu.declare -A domains domains[1]='mydomain.com' domains[2]='api.mydomain.com' domains[3]='dev.mydomain.com' domains[4]='test.mydomain.com' - Ověřte, že SEARCHSTRING skutečně obsahuje to, co chcete, aby skript hledal:
SEARCHSTRING="lsnode:/home/$USER/" - Pokud chcete, upravte velikost logu. Toto je část, která řeší velikost logu a rotaci logovacích souborů (detaily zde nebudu rozebírat):
# rotate log - maintain logsize at an acceptable limit LOGSIZE=$(cat $LOGDIR/$LOGFILE | wc -l) if [ $LOGSIZE -gt 1000 ]; then mv -f $LOGDIR/$LOGFILE $LOGDIR/$LOGFILE.1 fi - Pokud chcete, upravte LOGDIR – aktuálně je nastaveno na logování ve složce skriptu.
- Vytvořte složku na vašem webhostingu pro uložení vlastních skriptů – například:
/cronscripts. - Zkopírujte upravený
cleanup_orphans.shdo složky na webhostingu:/cronscripts/cleanup_orphans.sh. - Přidejte cron úlohu v cPanelu. Doporučuji spouštět skript pravidelně, např. každých 5–30 minut (v závislosti na množství provozu, který vytváří „sirotčí“ procesy).
Příklad:*/5 * * * * /home/infoqrco/cronscripts/cleanup_orphans.sh - Sledujte první spuštění; vyzkoušejte přepínače -v (podrobný výstup) a -d (suchý běh). Zkontrolujte, že je vytvořen logovací soubor, a ověřte, že cron úloha běží podle očekávání.
Hotovo! Vaše „sirotčí“ Node.js procesy jsou nyní automaticky spravovány.
Původní návod vytvořen jedním z našich chytrých zákazníků ;-) : https://github.com/jlmantov/shellscripts/blob/main/docs/cleanup_orphans.md