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'
Možnosti:
-v Verbose
-d Dry-run - zobrazí zamýšlené chování, ale nic nezmění
-f Force kill - použije SIGKILL místo SIGTERM
-h Help (tato zpráva o použití)
Výchozí SEARCHSTRING: 'lsnode:/home/$USER/'
Pokud je skript volán bez 'SEARCHSTRING', 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é.
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):
# rotace logu - udržuje velikost logu v přijatelném limitu 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