Node сервер работает навсегда

У меня есть приложение node, работающее как демон на сервере с вечно. После одного из обновлений я попытался остановить его (перезапустить позже). Но, к моему удивлению, forever stopall ничего не сделал No forever processes running. Forever list вернул то же самое. Обе команды, которые я пробовал с sudo, также.

Проблема в том, что я ясно вижу, что node все еще работает (мое приложение работает отлично). Любая идея, что не так?

P.S. Мне нужно было как можно быстрее обновлять обновление, поэтому я просто перезагрузил сервер. Но я все еще интересуюсь этой ситуацией.

P.S.S после ввода 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

Почему это происходит? Я запускаю node app.js на amazon aws.

Ответ 1

EDIT:

Мне удалось определить ваши приложения в forever с помощью UID, а затем не использовать forever stopall. Это более чистый способ и навсегда будет убивать все процессы в зависимости от script.

Вам просто нужно добавить параметр --uid "scriptID", а затем все процессы, зависящие от него, будут контролироваться вместе.

Чтобы запустить новый демон: forever start --uid "demo" --sourceDir /home/procdir -l /home/log/logfile -o /home/log/outputfile -a -d -v taskName

Остановить демон: 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 

В любом случае, вы также можете запустить (руками) эту команду, чтобы убить процессы: во-первых, убейте все навсегда задачи (это предотвратит навсегда повторное выполнение задачи при ее убийстве):

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

После этого, когда навсегда убивается, теперь настало время убить ваш node_app

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

Я настоятельно рекомендую вам не использовать kill. forever --uid, безусловно, будет лучшим решением.

Надеемся, что это решение поможет вам!

EDIT:

Поскольку forever --uid устарел, я попытался найти способ управления несколькими приложениями по имени (без использования метода устаревшего метода --uid). Кажется, использование конфигурационных файлов - это решение. Как указано в навсегда docs uid и id параметры все еще используются в файлах конфигурации. После некоторых тестов я понял, что id является правильным параметром:

Пример:

-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 

навсегда/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
}