Tämä skripti tulee ajaa cron-työnä cPanel-webhotellissasi.
Tämä ei ole täydellinen ratkaisu (koska sellaista ei ole) – pikemminkin väliaikainen kiertotie, sillä se ei ratkaise varsinaisia ongelmia. Skripti käsittelee oireita (jumittuneita prosesseja) lähettämällä niille SIGTERM-signaalin, jotta ne päättyvät – ja vapauttavat näin lukitut resurssit – mikä tuo vakautta webhotellissa isännöityyn NodeJS-sovellukseen.
Tarkoitus
NodeJS-sovellusten ajaminen cPanel-ympäristössä on hieman erilaista kuin NodeJS-sovellusten ajaminen paikallisesti. Prosessit voivat epäonnistua ja saada cPanelin prosessinhallintajärjestelmän käynnistämään uuden NodeJS-instanssin – tai prosessit, joiden olisi pitänyt päättyä, jäävät roikkumaan ”haamuprosesseiksi”. Lopulta tämä voi kuluttaa kaikki resurssit, kunnes cPanelin Resource Monitor estää lisäkäytön.
cleanup_orphans.sh [options] 'SEARCHSTRING'
Options:
-v Verbose
-d Dry-run - näytä aiottu toiminta mutta älä koske mihinkään
-f Force kill - käytä SIGKILL-signaalia SIGTERM:n sijaan
-h Help (tämä käyttöviesti)
Oletus SEARCHSTRING: 'lsnode:/home/$USER/'
Jos kutsutaan ilman 'SEARCHSTRINGiä', skripti käy läpi sisäisen
domain-taulukon (hakusanaan lisätyt kansionimet) ja siivoaa
jokaisen 'domainin' erikseen, yksi kerrallaan.
Jos skriptiä kutsutaan 'SEARCHSTRING'-syötteellä, ennalta määritelty SEARCHSTRING korvataan annetulla syötteellä.
Muutoin skripti käy läpi sisäisen domain-taulukon (hakusanaan lisättävät kansionimet) siivotakseen jokaisen ”domainin” erikseen, yksi kerrallaan.
Lokitus
Lokitus on toteutettu, jotta olisi mahdollista seurata historiatietoja – eli kuinka monta prosessia on käsitelty. Liiallinen lokitus voi kuitenkin luoda uuden ongelman; emme halua, että levytila loppuu loputtoman lokituksen takia. Ratkaisuna on rajoittaa lokit kahteen tiedostoon, joista kumpikin voi sisältää enintään 1000 riviä.
Toteutus tietyssä cPanel-ratkaisussa.
Toteutus tietyssä cPanel-ratkaisussa
- Kopioi skripti ”sellaisenaan” paikalliselle levylle.
- Skriptillä on tämä assosiatiivinen taulukko, joka sisältää kaikkien cPanelissa isännöityjen Node.js-sovellusten juurikansionimet:
Muokkaa taulukkoa suosikkieditorissasi niin, että se vastaa omaa webhotellirajapintaasi.declare -A domains domains[1]='mydomain.com' domains[2]='api.mydomain.com' domains[3]='dev.mydomain.com' domains[4]='test.mydomain.com'
- Varmista, että SEARCHSTRING todella sisältää sen, mitä haluat skriptin etsivän:
SEARCHSTRING="lsnode:/home/$USER/"
- Säädä lokikokoa halutessasi. Tämä on se osa, joka käsittelee lokikoon ja lokitiedostojen kierrätyksen (en mene tässä yksityiskohtiin):
# rotate log - pidä lokin koko hyväksyttävissä rajoissa LOGSIZE=$(cat $LOGDIR/$LOGFILE | wc -l) if [ $LOGSIZE -gt 1000 ]; then mv -f $LOGDIR/$LOGFILE $LOGDIR/$LOGFILE.1 fi
- Säädä LOGDIR, jos haluat – se on tällä hetkellä asetettu kirjaamaan skriptin omaan kansioon.
- Luo webhotelliisi kansio omia skriptejä varten – esimerkiksi:
/cronscripts
. - Kopioi muokattu
cleanup_orphans.sh
webhotellikansioon:/cronscripts/cleanup_orphans.sh
. - Lisää cron-ajo cPanelissa. Suosittelen ajamaan skriptin säännöllisesti, esim. 5–30 minuutin välein (riippuen liikennemäärästä, joka luo ”orpoja” prosesseja).
Esimerkki:*/5 * * * * /home/infoqrco/cronscripts/cleanup_orphans.sh
- Seuraa ensimmäistä ajoa; kokeile tarvittaessa lippuja -v (verbose) ja -d (dry-run). Tarkista, että lokitiedosto luodaan ja varmista, että cron-ajo toimii odotetusti.
Valmis! ”Orvot” Node.js-prosessisi käsitellään nyt automaattisesti.
Alkuperäisen ohjeen teki eräs viisas asiakkaamme ;-) : https://github.com/jlmantov/shellscripts/blob/main/docs/cleanup_orphans.md