我编写了一个简单的 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/