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
}