节点 – 尝试使用Forever重新启动不会在cronjob上的bash脚本中工作

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

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

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进程正在运行的事实,所以不知道为什么会出现这种情况。 看来这两种运行方法应该没有区别。 两个脚本都以相同的用户身份运行。 有谁知道为什么永远这样奇怪的performance?

forever只限于当前用户拥有的进程。 如果用户启动cron作业与最初启动该进程的用户不是同一个用户,那么forever stopall将不会find要杀死的任何PID。

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

我没有testing过,但是你可能想看看永远的选项,比如–exitcrash标志。

处理其他程序,自动重新启动您的服务器永远有问题。 虽然不特定Chron, 这个链接可能会有所帮助。