2014-09-12 5 views
11

Ich habe eine Knoten-Anwendung läuft als Daemon auf dem Server mit für immer. Nach einem der Updates versuchte ich es zu stoppen (um später neu zu starten). Aber zu meiner Überraschung forever stopall hat nichts getan No forever processes running wurde zurückgegeben. Forever list hat das gleiche zurückgegeben. Beide Befehle habe ich auch mit sudo versucht.Node-Server läuft nach für immer stopall

Das Problem ist, dass ich klar sehe, dass der Knoten noch läuft (meine App funktioniert gut). Irgendeine Idee, was falsch war?

P.S. Ich musste das Update so schnell wie möglich aktualisieren, also habe ich den Server neu gestartet. Aber ich bin immer noch neugierig auf diese Situation.

P.S.S nach 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 

Warum Eingabe ist das passiert? Ich benutze Knoten app.js auf Amazon aws.

+1

Haben Sie versucht, durch die Server-Prozesse suchen: 'ps aux | grep ' – ovi

+0

hast du sudo für immer versucht stopall oder sudo für immer stop [process_id]? –

+0

Ich habe 'stopall' versucht. Ich habe auch versucht, mit meinem Einstiegspunkt zu stoppen, nicht Prozess-ID, weil ich nicht in der Lage war, seine ID von immer Liste zu bekommen. Ich habe 'ps aux | Grep'. Das ist ein guter Vorschlag, aber ich hatte solche Angst :-) dass ich es vergessen habe. –

Antwort

5

EDIT:

Ive verwaltet, wie Sie Ihre Anwendungen in forever mit einer UID zu markieren, und dann nicht forever stopall verwenden. Dies ist ein sauberer Weg, und wird für immer alle Prozesse abhängig von dem Skript zu töten.

Sie müssen nur den Parameter --uid "scriptID" hinzufügen, und dann werden alle davon abhängigen Prozesse zusammen gesteuert. zu töten 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 

Wie auch immer, können Sie auch laufen (Hände Weg) diesen Befehl ein:

Um einen neuen Daemon zu starten:forever start --uid "demo" --sourceDir /home/procdir -l /home/log/logfile -o /home/log/outputfile -a -d -v taskName

zu stoppen einen Daemon die Prozesse: Zuerst, töte alle für immer Aufgaben (das wird verhindern, dass die Aufgabe immer wieder ausgeführt wird, wenn sie getötet wird):

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

Danach, wenn immer getötet wird, dann es ist jetzt Zeit, um Ihre node_app zu töten

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

Ich empfehle Ihnen dringend, nicht kill bis verwenden. forever --uid wird sicherlich die beste Lösung sein.

Hoffe, diese Lösung hilft Ihnen!

EDIT:

Als forever --uid veraltet wurde, Ive versucht, die Art und Weise der Verwaltung mehrerer Apps Namen zu finden (ohne die --uid veraltete Methode). Es scheint, dass die Verwendung von Konfigurationsdateien die Lösung ist.Wie in forever docsuid und id lesen Parameter in Config-Dateien noch verwendet werden. Nach einigen Tests gelang es Ive, dass id der richtige Parameter ist:

Das Beispiel:

-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 

für immer/development.json

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

Index .js

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

Es scheint, dass UID jetzt veraltet ist. Ich frage mich, ob Sie eine Vorstellung davon haben, was Sie stattdessen verwenden sollen, um das von Ihnen aufgedeckte Verhalten zu zeigen. –

+0

Eine mögliche und einfache Lösung hinzugefügt. Es scheint, dass sie ID-Parameter in Konfigurationsdateien verwenden. –

+0

Toll, ich werde das versuchen, danke! –