node.js - Node - 尝试使用 Forever 重新启动在 cronjob 的 bash 脚本中不起作用

标签 node.js forever

我编写了一个简单的 bash 脚本,每当提交时都会自动将代码部署到我的 Node.js 服务器,然后使用永久重新启动服务器。该脚本在 cronjob 上定期运行。哦,是的,该网站在发布之前仍处于开发阶段,因此服务器不断重新启动。 :)

该脚本还执行其他一些操作,但真正有趣的部分是以下两行代码:

forever stopall
forever start app.js

当我自己从命令行手动运行脚本时,这两个命令会出现以下输出:

Stopping all node jobs
info:    Forever stopped processes:
data:        uid  command             script forever pid   logfile                          uptime
data:    [0] ev5a /usr/local/bin/node app.js 17482   17484 /home/ec2-user/.forever/ev5a.log 0:0:13:17.967
Starting up node server again
info:    Forever processing file: app.js

但是,当作业通过 cron 自动运行时,输出如下:

Stopping all node jobs
^[[32minfo^[[39m:    No forever processes running
Starting up node server again
^[[32minfo^[[39m:    Forever processing file: ^[[90mapp.js^[[39m

这对我来说真的很奇怪。看起来,当脚本通过 cron 运行时,Forever 似乎认为在尝试停止所有操作时甚至没有任何 Node 进程在运行。我知道 Node 进程正在运行,所以不确定为什么会出现这种情况。看来两种运行方法之间应该没有区别。两个脚本都以同一用户身份运行。有谁知道为什么永远的行为如此奇怪?

最佳答案

forever 通常仅限于当前用户拥有的进程。如果触发 cron 作业的用户与最初启动该进程的用户不同,则 forever stopall 将找不到任何要终止的 PID。

例如,我使用名为“nodejs”的用户执行所有 Node 应用程序。如果我以交互方式使用系统,我可以使用sudo -H -u nodejs permanent list。在 root crons 或/etc/rc.local 上,我将使用 su - nodejs -c "forever start/path/to/app.js"

关于node.js - Node - 尝试使用 Forever 重新启动在 cronjob 的 bash 脚本中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15278993/

相关文章:

javascript - 如何在node.js ejs模板中将变量从后端传递到前端

python - Node.js 使用 chrome-remote-interface 进行抓取

node.js - Node 中的 Server.listen() 给出 "Error [ERR_SERVER_ALREADY_LISTEN]: Listen method has been called more than once without closing."

javascript - Node.js 和 Forever/Forever-Monitor

node.js - 永远运行 sudo 命令

javascript - 函数返回 undefined variable Javascript

javascript - Node.js 中的时间敏感数据

node.js - 方法覆盖安装时出错

node.js - NodeJS/Forever 归档日志

node.js - 使用 nodeJS/forever 忽略配置文件