Node.js 节点服务器在永久停止后运行

Node.js 节点服务器在永久停止后运行,node.js,forever,Node.js,Forever,我有一个节点应用程序在服务器上作为守护进程运行,并具有永久性。在一次更新之后,我试图停止它(稍后重新启动)。但令我惊讶的是,forever stopall什么也没做没有返回运行的永久进程永久列表已返回相同的值。这两个命令我也试过用sudo 问题是,我可以清楚地看到节点仍在运行(我的应用程序工作正常)。知道怎么回事吗 p.S.我需要尽可能快地滚动更新,所以我只是重新启动了服务器。但我仍然对这种情况感到好奇 键入ps aux|grep app.js后的附加说明 ubuntu 1320 0.0

我有一个节点应用程序在服务器上作为守护进程运行,并具有永久性。在一次更新之后,我试图停止它(稍后重新启动)。但令我惊讶的是,
forever stopall
什么也没做
没有返回运行的永久进程<代码>永久列表
已返回相同的值。这两个命令我也试过用sudo

问题是,我可以清楚地看到节点仍在运行(我的应用程序工作正常)。知道怎么回事吗

p.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

为什么会这样?我正在amazon aws上运行node app.js。

解决方案1-使用--uid

我已经设法使用UID在
中永远标记你的应用,然后不使用
永远停止所有
。这是一种更干净的方法,并且将永远杀死依赖于脚本的所有进程

您只需要添加
--uid“scriptID”
参数,然后所有依赖它的进程都将被一起控制

要启动新的守护进程
永久启动--uid“demo”--sourceDir/home/procdir-l/home/log/logfile-o/home/log/outputfile-a-d-v taskName

要停止守护进程
永远停止-uid“demo”

无论如何,您也可以运行(hands-way)此命令来终止进程:首先,终止所有永久任务(这将防止永久在终止任务时再次运行任务):

在那之后,当永远被杀死,那么现在是时候杀死你的node_应用程序了

我强烈建议您不要使用
kill
永远——uid
肯定是最好的解决方案

希望此解决方案对您有所帮助

解决方案2-永远--uid已被弃用

由于
forever--uid
已被弃用,我试图找到按名称管理多个应用程序的方法(不使用--uid弃用方法)。似乎使用配置文件就是解决方案。正如在
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 
forever/development.json

index.js

a=0;

while(a您是否尝试过通过服务器进程查看:
ps aux | grep
您是否尝试过sudo forever stopall或sudo forever stop[process_id]?我尝试过
stopall
。我也尝试过用我的入口点停止,而不是进程id,因为我无法从永久列表中获取它的id。我没有尝试过
ps aux | grep
。这是一个很好的建议,但我非常害怕:-)以至于我忘记了它。@ovi我又经历过同样的情况。我用信息更新了这个问题。看来UID现在不推荐了。我想知道你是否有一个想法,用什么来代替,为了让你的行为暴露?添加了一个可能和简单的解决方案。看起来他们在配置文件中使用了id参数。欢迎!!抱歉等了这么久!!希望能有帮助!!
 forever list | grep your_app | `awk '/\[0\]/{print "forever stop "$8}'` 
ps -efa | grep  node | grep your_app | `awk '{ print "kill "$2}'` 
-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 
{
    // Comments are supported
    "id": "app4U",
    "append": true,
    "watch": true,
    "script": "index.js",
    "sourceDir": "/jome/myuser/app"
}
a=0;
while (a<10) {
    a+=1
    a-=1
}