【问题标题】:node server is running after forever stopall节点服务器在永远停止后运行
【发布时间】:2014-11-06 12:08:27
【问题描述】:

我有一个节点应用程序作为守护进程在服务器上永远运行。在其中一个更新之后,我试图停止它(稍后重新启动)。但令我惊讶的是forever stopall 什么都没做No forever processes running 被退回。 Forever list 已返回相同的值。我也用 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

为什么会这样?我在亚马逊 AWS 上运行 node app.js。

【问题讨论】:

  • 您是否尝试过查看服务器进程:ps aux | grep <your_script>
  • 你试过 sudo forever stopall 还是 sudo forever stop [process_id]?
  • 我试过stopall。我还尝试停止我的入口点,而不是进程 ID,因为我无法从永久列表中获取它的 ID。我还没有尝试过ps aux | grep。这是一个很好的建议,但我很害怕 :-) 我忘了它。
  • @ovi 我又遇到了同样的情况。我用信息更新了问题。

标签: node.js forever


【解决方案1】:

解决方案 1 - 使用 --uid

我已经管理了如何使用 UID 在 forever 中标记您的应用,然后不使用 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 

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

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

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

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

我强烈建议您不要使用killforever --uid 肯定是最好的解决方案。

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

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

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

永远/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
}

【讨论】:

  • UID 似乎已被弃用。我想知道您是否知道要使用什么来代替您暴露的行为?
  • 添加了一个可行且简单的解决方案。似乎他们在配置文件中使用了 id 参数。
  • 欢迎您!!抱歉让您久等了!!希望有帮助!!
猜你喜欢
  • 2013-05-18
  • 2019-07-14
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多