Puncte:0

Cum obțin o închidere grațioasă a Node.js care rulează pe Apache/CentOS/Plesk?

drapel br

Sperăm că această întrebare are un răspuns care este generic pentru Apache și Node.js, și nu specific pentru Plesk (pentru că știu ce părere aveți despre întrebările specifice Plesk!).

Recent am decis să adaug câteva notificări prin mesaje text la o aplicație server Node.js, pentru când a fost descoperită o anumită actualizare. În timp ce eram la asta, m-am gândit că ar fi o idee bună să adaug și notificări de pornire și oprire a serverului. Acest lucru a dus la câteva descoperiri neplăcute:

  1. Aproximativ la fiecare 24 de ore serverul meu (nu întreaga platformă de server, doar această aplicație de server Node.js) se repornea fără un motiv întemeiat, între 3:30-4:30 AM.
  2. Nu a existat o detectare grațioasă a unei închideri înainte de fiecare repornire, așa că se pare că aplicația Node.js a fost eliminată definitiv, nu a fost trimisă SIGINT sau SIGTERM, pe care le ascultam.
  3. Chiar și folosind (tuse), unde puteți solicita o repornire a aplicației, nu are loc o repornire grațioasă. Aplicația Node.js este pur și simplu ucisă fără ceremonie.

Butonul Node.js Restart App

Repornirea o dată pe 24 de ore, după unele investigații, este aparent declanșată de rotația jurnalelor Apache. De ce simpla rotație a jurnalelor ar trebui să provoace acest lucru este un alt mister care trebuie rezolvat.

Între timp, vreau să știu dacă există o modalitate de a mă asigura că închiderile GRACEFUL au loc, dacă se întâmplă deoarece Apache se oprește sau se închide sau pentru că este apăsat butonul „Repornire aplicație”.

Caut opriri prin monitorizarea acestor semnale:

process.on('SIGINT', oprire);
process.on('SIGTERM', oprire);
process.on('SIGUSR2', oprire); // Folosit de instrumentele mele de dezvoltare

Există un alt semnal pe care ar trebui să-l verific? Procesul se închide fără milă cu un SIGKILL în schimb? Dacă da, pot schimba asta, poate cu un fel de întârziere pentru a oferi o oprire grațioasă să aibă loc?

Michael Hampton avatar
drapel cz
Ați verificat jurnalul aplicației dvs.?
kshetline avatar
drapel br
Nu pot vedea nimic util acolo, cu excepția cazului în care nu cunosc jurnalele potrivite pe care să le privesc. În jurnalele Apache, nu văd nimic. În `/var/log/httpd/error_log`, unde merge toată ieșirea Node.js (fie că este de la stdout sau stderr), tot ceea ce văd este Node.js-ul meu rulând vesel, apoi repornind fără nici un indiciu de ce a avut nevoie a reporni.
Michael Hampton avatar
drapel cz
Cred că în acest moment este foarte puțin ce putem face. Va trebui să cercetați orice face Plesk, fie când faceți clic pe butonul de repornire, fie orice face la 3:30 am, cel mai probabil ambele.
kshetline avatar
drapel br
Nu eram sigur dacă această problemă era specifică Plesk sau dacă ar putea exista o implementare standard pentru utilizarea Node.js cu Apache și sfaturi generale legate de Apache. Am postat acum câteva zile talk.plesk.com, iar până acum... greieri!
kshetline avatar
drapel br
Când am introdus „plesk” ca etichetă pentru această postare, a existat un avertisment pentru acea etichetă că majoritatea întrebărilor despre Plesk aparțin de pe webmasters.stackexchange.com. Aceeași întrebare de acolo, totuși, a fost închisă ca off-topic, așa că sper că cineva poate ajuta aici. Forumul Plesk este tăcut în această privință.
Michael Hampton avatar
drapel cz
Nu există o modalitate standard de a porni o aplicație Node.js. Va trebui să aflați cum face Plesk și nu este ceva cu care putem ajuta.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.