【问题标题】:Ubuntu 8.04 Hardy and node.js upstart scriptUbuntu 8.04 Hardy 和 node.js 新贵脚本
【发布时间】:2011-09-25 02:11:22
【问题描述】:

我正在尝试为我的 ubuntu 机器编写一个新贵脚本,它是 8.04 版“Hardy”。我已按照此站点上的说明进行操作:upstart for node.js 但似乎这些说明适用于当前版本的 ubuntu。

我注意到我的机器上不存在 /etc/init 目录,首先我尝试将脚本放在 /etc/init.d 目录中,然后我创建了 /etc/init 目录并将其放置在那里。

我将在下面发布我的 upstart 脚本(这与上面的网站基本相同,但有一些路径更改),但是当我运行 start jobname 时,我只收到一个错误“start: Unknown job: jobname”。因此,我将脚本更改为精简版,发布在下面,但我仍然得到相同的结果。

目前,我正在使用“nohup”命令来运行我的节点服务器,但我想要一个更持久的解决方案。

请帮忙?

脚本 1:

description "node.js chat server"
author      "iandev ith3"

# used to be: start on startup
# until we found some mounts weren't ready yet while booting:
start on started mountall
stop on shutdown

# Automatically Respawn:
respawn
respawn limit 99 5

script
    # Not sure why $HOME is needed, but we found that it is:
    export HOME="/root"

    exec /root/local/node/bin/node /home/ian/chat.js >> /var/log/node.log 2>&1
end script

post-start script
   # optionally put a script here that will notifiy you node has (re)started
   # /root/bin/hoptoad.sh "node.js has started!"
end script

脚本 2:

description "node.js chat server"
author      "iandev ith3"

script
    exec /root/local/node/bin/node /home/ian/chat.js >> /var/log/node.log 2>&1
end script

【问题讨论】:

  • 我最终只使用了 cron @reboot 来确保我的脚本在启动时运行,因为我永远无法启动或永远在服务器上工作。它解决了我的总体目标,但没有回答问题,所以我将其作为评论留下。 (以防人们有类似的问题但不知道 cron @reboot)

标签: javascript ubuntu node.js upstart


【解决方案1】:

只需使用 Forever。 https://github.com/indexzero/forever

【讨论】:

  • 我尝试永远使用,我用 npm install forever 安装,当发出'forever'命令时,我得到这个:'bash: forever: command not found'。
  • 我正在尝试使用永远 github 页面上的第二个选项,使用 node.js 代码中的 Forever 实例。虽然我将尝试按照页面上的说明进行操作,但不确定这是如何工作的,但感谢您提供任何额外的帮助。
  • 当我尝试从我的 node.js 代码中永远使用时,var forever = require('forever');我收到一个错误,错误:找不到模块 '../build/default/daemon' 有什么想法吗?
  • 所以我必须使用 -g 选项永久安装,现在可以识别从命令行运行“永久”但我得到与上述相同的错误:错误:找不到模块'../build /默认/守护进程'
  • 您应该阅读文档。如果您有问题,您应该在项目中使用问题跟踪器提供程序。见:github.com/indexzero/forever
【解决方案2】:

通过查看您提供的网站,我会说 /etc/init 只是一个错字,应该是 /etc/init.d/。您可能需要检查一些事项:

  • 脚本上的可执行标志。大多数版本的 Ubuntu 可执行文件在从命令行运行“ls”时显示为绿色。如果您想检查您的文件是否可执行,请从命令行运行“ls -l /etc/init.d/YOUR_SCRIPT”。你会看到这样的东西: -rwxr-xr-x 1 根 1342 2010-09-16 10:13 YOUR_SCRIPT x 表示它是可执行的。 要设置可执行标志(如果未设置),请运行 chmod u+x YOUR_SCRIPT

  • 我很确定对于旧版本的 ubuntu,您需要将脚本放在 /etc/rc.d/rc3.d 或 /etc/rc3.d 中。 linux 所做的是通过 rc0.d 运行到 rc5.d 并执行其中的每个脚本。从它的样子来看,ubuntu 正在从这个转向更简单的东西,所以如果你有 rc 目录,你可能需要稍微编辑你的脚本。

无论如何,我认为我在这里有点过于复杂了。检查您的可执行标志,如果您有 rc 目录,我们将从那里继续。

【讨论】:

  • 我确实使用 chmod u+x nodechat.conf 使其可执行,但检查了 rc 目录。谢谢您的帮助。是的,有 rc0.d 到 rc6.d
  • 我查看了 rc0.d 中的文件,它们似乎都是指向 /etc/init.d 中文件的符号链接。此外,将我的脚本移动到 rc0.d 并没有什么不同。
  • 听起来你会想把它放在 rc3.d 中(rc0.d 是 linux 开始运行所有关键守护进程的地方,例如挂载目录)。因此,您的脚本将进入 /etc/init.d,并且您将在 rc3.d 中创建指向它的符号链接,确保添加 SxxYOURSCRIPT(其中 xx 是数字)。它的作用是告诉 linux 你什么时候想启动这个守护进程,在较低的数字之后完成较高的数字,S 代表启动。现在虽然只是测试以确保您的脚本实际上正在执行您想要的操作。然后你可以在它启动时做所有这些事情来启动
  • 我做了这一切,把我的脚本留在了 init.d 中,在 rc3.d 中用 SXXSCRIPTNAME 创建了一个符号链接。如果我尝试通过 cd /etc/init.d 然后 ./scriptname.conf 运行 upstart 脚本,我会收到很多错误。如果我尝试发出以下命令:启动 SCRIPTNAME,我仍然会启动:未知作业:脚本名称。
【解决方案3】:

使用 sudo 启动进程可能不是最好的方法,但这是我在本地电脑上设置的:

#!upstart
description "node.js server"
author      "alessio"

start on startup
stop on shutdown

script
    export HOME="/ubuntu"

    exec sudo -u ubuntu /usr/bin/node /home/ubuntu/www/test.js 2>&1 >> /var/log/node.log
end script

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2010-10-14
    • 2012-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多