2014-09-12 26 views
11

Tôi có một ứng dụng nút đang chạy dưới dạng một daemon trên máy chủ với mãi mãi. Sau một trong các bản cập nhật, tôi đã cố dừng nó lại (để khởi động lại sau). Nhưng với sự ngạc nhiên của tôi forever stopall đã không làm gì cả No forever processes running đã được trả lại. Forever list đã trả về tương tự. Cả hai lệnh tôi đã thử với sudo là tốt.máy chủ nút đang chạy sau khi dừng vĩnh viễn

Vấn đề là tôi có thể thấy rõ rằng nút đó vẫn đang chạy (ứng dụng của tôi đang hoạt động tốt). Bất kỳ ý tưởng gì là sai?

P.S. Tôi cần phải cuộn cập nhật nhanh nhất có thể vì vậy tôi vừa khởi động lại máy chủ. Nhưng tôi vẫn tò mò về tình huống này.

P.S.S sau khi nhập 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 

Tại sao điều này xảy ra? Tôi đang chạy nút app.js trên amazon aws.

+1

Bạn đã thử tìm kiếm máng các quy trình máy chủ: 'ps aux | grep ' – ovi

+0

bạn đã thử sudo mãi mãi stopall hoặc sudo mãi mãi dừng [process_id]? –

+0

Tôi đã thử 'stopall'. Tôi cũng đã cố gắng dừng lại với điểm nhập cảnh của tôi, không xử lý id vì tôi đã không thể nhận được ID của nó từ danh sách mãi mãi. Tôi chưa thử 'ps aux | grep'. Đây là một gợi ý tốt, nhưng tôi đã rất sợ :-) mà tôi quên mất nó. –

Trả lời

5

EDIT:

Tôi đã được quản lý như thế nào để đánh dấu các ứng dụng của bạn trong forever sử dụng một UID, và sau đó không sử dụng forever stopall. Đây là một cách sạch hơn, và sẽ làm cho mãi mãi để giết tất cả các quá trình tùy thuộc vào kịch bản.

Bạn chỉ cần thêm thông số --uid "scriptID" và sau đó tất cả các quá trình tùy thuộc vào nó, sẽ được kiểm soát cùng nhau.

để bắt đầu một daemon mới: forever start --uid "demo" --sourceDir /home/procdir -l /home/log/logfile -o /home/log/outputfile -a -d -v taskName

để Stop một daemon: 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 

Dù sao, bạn cũng có thể chạy (tay chiều) lệnh này để giết các quá trình: Đầu tiên, giết tất cả các nhiệm vụ mãi mãi (điều này sẽ ngăn chặn mãi mãi để chạy lại nhiệm vụ khi giết nó):

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

Sau đó, khi mãi mãi bị giết chết, sau đó bây giờ Nó rất thời gian để giết node_app bạn

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

tôi khuyên bạn không sử dụng kill. forever --uid chắc chắn sẽ là giải pháp tốt nhất.

Hy vọng giải pháp này sẽ giúp bạn!

EDIT:

Như forever --uid đã bị phản đối, tôi đã cố gắng tìm ra cách để quản lý nhiều ứng dụng theo tên (mà không sử dụng phương pháp phản --uid). Có vẻ như sử dụng các tập tin cấu hình là giải pháp.Như đã đọc trong các tham số forever docsuidid vẫn được sử dụng trong tệp cấu hình. Sau khi một số xét nghiệm, tôi đã quản lý mà id là tham số đúng:

Ví dụ:

-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 

vĩnh viễn/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

Dường như UID hiện không được chấp nhận. Tôi tự hỏi nếu bạn có một ý tưởng về những gì để sử dụng thay vào đó, để có những hành vi bạn tiếp xúc? –

+0

Đã thêm một giải pháp khả thi và dễ dàng. Có vẻ như họ đang sử dụng tham số id trong các tập tin cấu hình. –

+0

Tuyệt vời, tôi sẽ cố gắng, cảm ơn bạn! –

Các vấn đề liên quan