Mam takovy problem se spoustenim / ukoncovanim node aplikace.
Vec, ktera nekolik let fungovala prestala fungovat po nedavne aktualizaci node a npm.
Aplikace se na FreeBSD serveru spousti rc skriptem, ktery obsahuje tuhle klicovou cast (shell script)
procname="/usr/local/bin/node"
command="/usr/sbin/daemon"
command_args="-f -p ${pidfile} ${nodesvc_npmenv} npm start ${node_flags}"
Spusteni "funguje" porad, ale uz to pres rc skript nejde ukoncit, nebo restartovat. Problem je v tom, ze do pidfile se zapise PID prikazu, ktery teprve forkne child proces te node aplikace, takze v pidfile je pak PID procesu, ktery uz neexistuje, respektive kratce po spusteni aplikace je prikazem
ps videt jako <defunct> a pak tenhle zombie proces zmizi.
|-+= 03119 www daemon: env[3120] (daemon)
| \--- 03120 www <defunct>
|--- 03121 www node -r dotenv/config dist/index.js test_graphql
V pidfile je PID 3120
Jelikoz nikde nebezi funkcni verze, tak nevim, jak by mel ten strom procesu vypadat spravne. Jestli to puvodne bylo takhle
|-+= 03119 www daemon: env[3120] (daemon)
| \--- 03120 www node -r dotenv/config dist/index.js test_graphql
Nebo na te pozici toho nynejsiho <defunct> byl nejaky jiny node proces, ktery teprve spoustel
node -r dotenv/config dist/index.js test_graphql.
Ten command
daemon je tam kvuli presmerovani stdin + stdout + stderr (obdoba toho, kdyby se pouzilo "npm start &", ale umi to jeste par dalsich veci)
Uz jednou se v node.js / npm neco zmenilo, ze se v rc skriptu musel zmenit procname="/usr/local/bin/npm" na procname="/usr/local/bin/node", protoze ten proces ve vypisu
ps se uz nejmenoval npm, ale node a identifikace procesu pro stop / restart se neprovadi jen matchnutim PID z pidfile, ale zaroven porovnanim jmena prikazu (musi sedet interpretr), aby nekdo nepodvrhnul v jine sluzbe PID nejakeho systemoveho procesu)
A ted tedy ke konkretnimu dotazu - sledujete nekdo vyvoj node.js a npm tak peclive, ze byste me dokazali nasmerovat, kde a kdy doslo k nejake zmene, ktera ovlivnuje tohle chovani?
Da se nejak vynutit zpatky to puvodni chovani, kde tam zustal i ten proces, ktery je primym potomkem "daemon" a jehoz PID se zapise do pidfile?
Resim to z pohledu sysadmina, tedy pouze se staram o to, aby aplikace / sluzby bezely, nejsem koder te aplikace, takze stourat do toho, ze by se poustela jinak je trochu slozitejsi (to nemuzu udelat ja, to musi udelat nekdo jiny).
Jelikoz to pravdepodobne prestalo spravne fungovat po upgrade, ktery probehl v prosinci, mam k tomu jeste info o zmenach verze node a npm:
node16 upgraded: 16.15.1 -> 16.16.0
npm upgraded: 8.5.2 -> 8.19.1
Takze nekde mezi verzi npm 8.5.2 -> 8.19.1 a nebo mezi node verzi 16.15.1 -> 16.16.0 se zmenilo neco, co minimalne od roku 2018 fungovalo.