【问题标题】:Cannot get my Upstart script to run Node.js and Forever when server restarts服务器重新启动时,无法让我的 Upstart 脚本运行 Node.js 和 Forever
【发布时间】:2012-03-27 14:53:38
【问题描述】:

我最近一直在设置我的服务器,今天我不得不重新启动它......然后我意识到我运行的所有 Node 应用程序都不再运行了。我正在使用 Node Forever 模块来保持应用程序运行,但后来我意识到当我的服务器重新启动或关闭并重新启动时我仍然需要启动它们。

我一直在研究实现此目的的最佳方法,但我正在尝试的方法似乎不起作用。我在我的 Ubuntu Server 10.04LTS 远程服务器上的 /etc/init/ 文件夹中创建了一个 Upstart 脚本,并尝试重新启动,但它似乎没有做任何事情。当我运行 forever list 时没有列出任何内容。

这是我今天尝试的当前 Upstart 脚本:

#/etc/init/myapp.conf

start on (local-filesystems and net-device-up IFACE=eth0)
stop on shutdown

script

    exec sudo /usr/local/bin/node /var/www/myapp/myapp.forever.js
end script

我在 Node 脚本中使用 Forever,因为我发现按照自己的意愿配置它更容易。如果我在脚本之外执行此操作,已确认脚本运行良好,但 Upstart 脚本本身存在问题。它似乎与 /etc/init/ 文件夹中的所有其他 Upstart 脚本具有相同的权限。

作为补充说明,我已经阅读了几乎所有可以在 StackOverflow 上找到的答案,以及我如何组合我目前拥有的脚本。

更新:

有了汤姆的回答,我现在已经尝试过:

#/etc/init/myapp.conf

start on (local-filesystems and net-device-up IFACE=eth0)
stop on shutdown

exec sudo /usr/local/bin/node /var/www/myapp/myapp.forever.js

但是还是不行。

所以我不知道为什么当我重新启动服务器时它没有运行。请帮忙!

【问题讨论】:

  • 你为什么要使用 Forever?我直接通过 Upstart 运行节点可执行文件,它可以正常工作并重新启动。
  • @hiteshjoshi 为什么?恐怕这不是正确的答案。
  • 我有同样的问题..我正在使用这个参考exratione.com/2013/02/…
  • 我的问题原来与流浪者有关,所以我用这个 ref razius.com/2013/11/launching-services-after-vagrant-mount 修复了你没有指定,所以我想它是你正在玩的物理服务器,所以这并不相关。建议您尝试我上面评论中提到的方法,即永远使用命令行

标签: node.js restart init upstart ubuntu-server


【解决方案1】:

您是否尝试过不使用启动脚本行?

description "my server"
author  "name"

start on (local-filesystems and net-device-up IFACE=eth0)
stop on shutdown

#respawn if you were not using forever

exec sudo /usr/local/bin/node myapp.forever.js

来源:http://caolanmcmahon.com/posts/deploying_node_js_with_upstart

【讨论】:

  • 你好@Tom。我已经尝试了您的建议,但仍然无法正常工作。我现在正在阅读您的有用链接...伙计,这让我发疯了!
【解决方案2】:

这不是一个非常愉快的设置。 upstart 的工作方式是它使用启动命令的进程 ID 启动您的进程运行它。 Forever JS 的工作原理类似,它可能是受到 Upstart 的启发。

当您尝试使用 upstart 运行 forever.js 时,您在 upstart 脚本中创建的永远进程会在启动后立即退出。新贵依靠让流程继续运行。

当我尝试使用 upstart 永远运行时,我最终运行了五个不同的永远进程,因为 upstart 认为它永远无法启动,并重试了五次。

【讨论】:

    【解决方案3】:

    我选择在用户的 crontab 文件中使用 @reboot 语句,该语句将在服务器重新启动时永久执行。

    @reboot forever start app.js
    

    补充阅读 - http://www.cyberciti.biz/faq/linux-execute-cron-job-after-system-reboot/

    【讨论】:

      猜你喜欢
      • 2018-09-25
      • 1970-01-01
      • 1970-01-01
      • 2013-09-11
      • 2014-02-18
      • 1970-01-01
      • 2015-10-27
      • 2016-03-28
      • 1970-01-01
      相关资源
      最近更新 更多