2014-09-12 11 views
11

Mam aplikację węzła działającą jako demon na serwerze z na zawsze. Po jednej z aktualizacji próbowałem go zatrzymać (aby ponownie uruchomić później). Ale ku mojemu zaskoczeniu forever stopall nie zrobił nic, co zostało zwrócony No forever processes running. Forever list zwrócił to samo. Oba polecenia próbowałem również z sudo.serwer węzłów działa po wieczorze stopall

Problem polega na tym, że wyraźnie widzę, że węzeł nadal działa (moja aplikacja działa bez zarzutu). Masz pojęcie, co jest nie tak?

P.S. Musiałem zaktualizować aktualizację tak szybko, jak to możliwe, więc właśnie zrestartowałem serwer. Ale nadal jestem ciekawa tej sytuacji.

P.S.S po wpisaniu ps aux | grep app.js

ubuntu 1320 0.0 2.2 663040 23232 ?  Ssl Sep12 0:00 /usr/bin/nodejs /usr/lib/node_modules/forever/bin/monitor node_app/app.js 
ubuntu 1322 0.0 6.9 992564 70792 ?  Sl Sep12 0:31 /usr/bin/nodejs /var/www/node_app/app.js 
root  9739 0.0 0.0 10468 936 pts/0 S+ 11:09 0:00 grep --color=auto app.js 

Dlaczego tak się dzieje? Używam app.js węzła na amazon aws.

+1

Czy próbowałeś przeszukać procesy serwera: 'ps aux | grep ' – ovi

+0

czy próbowałeś sudo na zawsze zatrzymać lub sudo na zawsze zatrzymać [process_id]? –

+0

Próbowałem "stopall". Próbowałem też zatrzymać się z punktem wejścia, a nie identyfikatorem procesu, ponieważ nie mogłem uzyskać identyfikatora z listy na zawsze. Nie próbowałem 'ps aux | grep'. To dobra sugestia, ale byłem tak przerażony :-), że o tym zapomniałem. –

Odpowiedz

5

EDIT:

Ive udało jak oznaczyć swoje aplikacje w forever użyciu UID, a następnie nie używając forever stopall. To jest czystszy sposób i na zawsze zabije wszystkie procesy w zależności od skryptu.

Wystarczy dodać parametr --uid "scriptID", a następnie wszystkie procesy w zależności od tego będą sterowane razem.

Aby rozpocząć nowego demona: forever start --uid "demo" --sourceDir /home/procdir -l /home/log/logfile -o /home/log/outputfile -a -d -v taskName

zatrzymać demona: forever stop -uid "demo"

-bash-4.1$ forever list 
info: Forever processes running 
data:  uid  command  script   forever pid id logfile          uptime   
data: [1] Test /usr/bin/node grunt serve:test 18217 18224 /home/admin/logs/test/forever.log 59:20:21:10.512 
data: [2] Dev /usr/bin/node grunt serve:dev 18347 18354 /home/admin/logs/dev/forever.log 59:20:19:56.87 
data: [3] Prod /usr/bin/node grunt serve:prod 20411 20418 /home/admin/logs/prod/forever.log   59:18:58:28.697 

W każdym razie, można również uruchomić (ręce sposób) to polecenie, aby zabić procesy: Najpierw zabij wszystkie na zawsze zadania (to na zawsze uniemożliwi ponowne uruchomienie zadania po zabiciu):

forever list | grep your_app | `awk '/\[0\]/{print "forever stop "$8}'` 

Po tym, gdy na zawsze zostaje zabity, a teraz Nadszedł czas, aby zabić node_app

ps -efa | grep node | grep your_app | `awk '{ print "kill "$2}'` 

Zdecydowanie zalecamy, aby nie używając kill. forever --uid z pewnością będzie najlepszym rozwiązaniem.

Mam nadzieję, że to rozwiązanie pomoże!

EDIT:

Jak forever --uid była przestarzała, Ive próbował znaleźć sposób zarządzania wieloma aplikacjami wg nazwy (bez użycia --uid metody przestarzałe). Wygląda na to, że używanie plików konfiguracyjnych jest rozwiązaniem.Jak przeczytano w parametrach forever docsuid i id parametry są nadal używane w plikach konfiguracyjnych. Po kilku próbach udało Ive że id jest odpowiedni parametr:

Przykład:

-bash-4.1$ pwd 
/jome/myuser/app 
-bash-4.1$ forever list 
info: No forever processes running 
-bash-4.1$ forever start ./forever/development.json 
warn: --minUptime not set. Defaulting to: 1000ms 
warn: --spinSleepTime not set. Your script will exit if it does not stay up for at least 1000ms 
info: Forever processing file: index.js 

-bash-4.1$ forever stop app4U 
info: Forever stopped process: 
    uid command    script forever pid id logfile       uptime  
[0] BaoO /usr/local/bin/node index.js 41196 41197 app4U /Users/me/.forever/BaoO.log 0:0:0:5.995 

zawsze/development.json

{ 
    // Comments are supported 
    "id": "app4U", 
    "append": true, 
    "watch": true, 
    "script": "index.js", 
    "sourceDir": "/jome/myuser/app" 
} 

indeks .js

a=0; 
while (a<10) { 
    a+=1 
    a-=1 
} 
+0

Wygląda na to, że UID jest teraz przestarzałe. Zastanawiam się, czy masz wyobrażenie o tym, czego użyć zamiast tego, aby mieć na sobie to zachowanie? –

+0

Dodano możliwe i łatwe rozwiązanie. Wygląda na to, że używają parametru id w plikach konfiguracyjnych. –

+0

Świetnie, spróbuję, dziękuję! –

Powiązane problemy