节点服务器在永远停止后运行

Sal*_*ali 13 node.js forever

我有一个节点应用程序作为服务器上的守护进程永远运行.在其中一次更新后,我试图阻止它(稍后重启).但令我惊讶的forever stopall是,没有做任何事情No forever processes running.Forever list已经返回相同.这两个命令我也试过sudo.

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

PS我需要尽快滚动更新,所以我只是重新启动服务器.但我仍然对这种情况感到好奇.

打字后PSS 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
Run Code Online (Sandbox Code Playgroud)

为什么会这样?我在amazon aws上运行节点app.js.

Ale*_*ñoz 6

解决方案1 ​​ - 使用--uid

我已经设法了如何forever使用UID 标记您的应用,然后不使用forever stopall.这是一种更简洁的方法,并将根据脚本永久杀死所有进程.

您只需要添加--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 
Run Code Online (Sandbox Code Playgroud)

无论如何,你也可以运行(手动)这个命令来杀死进程:首先,永远杀死所有任务(这将阻止永远在杀死它时再次运行任务):

 forever list | grep your_app | `awk '/\[0\]/{print "forever stop "$8}'` 
Run Code Online (Sandbox Code Playgroud)

在此之后,当永远被杀死时,现在是时候杀死你的node_app了

ps -efa | grep  node | grep your_app | `awk '{ print "kill "$2}'` 
Run Code Online (Sandbox Code Playgroud)

我强烈建议你不要使用kill. forever --uid肯定是最好的解决方案.

希望这个解决方案能帮到你

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

由于forever --uid已被废弃,从来就试图找到管理由名称的多个应用程序的方式(不使用--uid的方法已过时).似乎使用配置文件是解决方案.正如读入永远文档 uidid参数仍然在配置文件中使用.经过一些测试,我管理的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 
Run Code Online (Sandbox Code Playgroud)

永远/ development.json

{
    // Comments are supported
    "id": "app4U",
    "append": true,
    "watch": true,
    "script": "index.js",
    "sourceDir": "/jome/myuser/app"
}
Run Code Online (Sandbox Code Playgroud)

index.js

a=0;
while (a<10) {
    a+=1
    a-=1
}
Run Code Online (Sandbox Code Playgroud)