我编写了一个简单的 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 似乎认为在尝试 stopall 时甚至没有任何 Node 进程正在运行。我知道 Node 进程正在运行,所以不知道为什么会出现这种情况。看来这两种运行方法之间应该没有区别。两个脚本都以同一用户身份运行。有谁知道为什么永远的行为如此奇怪?