如何在openwrt上自动启动nodejs应用程序 - Arduino Yun -

时间:2016-03-15 08:44:38

标签: linux node.js express arduino openwrt

我正在尝试让nodejs应用程序在系统启动时自动启动。基本上我只需要运行命令node /dir/app。 我在Arduino Yun上使用openwrt。并试过几件事。

在openwrt网站上,它说我可以这样做。 https://wiki.openwrt.org/inbox/procd-init-scripts

#!/bin/sh /etc/rc.common
USE_PROCD=1
start_service() {
  procd_open_instance
  procd_set_param command node ///www/www-blink.js
  procd_close_instance
}

我也尝试将目录更改为/www/www-blink.js而不是///

然而,当我尝试用/etc/init.d/node-app start运行它时,我不确定我做错了什么,我显然错误地写了代码,但我不确定它应该是什么样子。

我尝试过的另一件事是节点模块foreverforever-service。 我使用npm install -g forever将其下载到我的计算机上并永久服务。我把它们转移到我的arduino yun上的usr / lib / node_modules。但是,当我尝试使用和永远(-service)命令时,它说

-ash: forever: not found

我尝试过其他一些东西,但没有任何效果。任何帮助将不胜感激。

- 我还需要能够使用npm start而不是node app启动我的快速脚本,但我想首先要让它完全正常工作。

4 个答案:

答案 0 :(得分:2)

您可以将启动命令(node / dir / app&)放在/etc/rc.local脚本中。这将在系统启动时自动启动nodejs应用程序。

答案 1 :(得分:1)

OpenWRT procd具有一个“ respawn”参数,它将重新启动退出或崩溃的服务。

# respawn automatically if something died, be careful if you have an 
# alternative process supervisor if process dies sooner than respawn_threshold,
# it is considered crashed and after 5 retries the service is stopped

procd_set_param respawn ${respawn_threshold:-3600} ${respawn_timeout:-5} ${respawn_retry:-5}

因此,您可以添加以下内容: procd_set_param重新生成60 5 5

或类似的内容添加到您的OpenWRT procd初始化脚本中。此60 5 5表示它将在重生之间等待5秒(中间参数),并且如果在60秒(第一个参数)中重振超过5次(最后一个参数),则会禁用服务(检测到“重新启动循环”)。

有关更多信息,请参阅此页面: https://openwrt.org/docs/guide-developer/procd-init-scripts

答案 2 :(得分:0)

您需要像node一样执行Linux Service应用程序。

Upstart非常适合这项任务

  

Upstart是/ sbin / init守护程序的基于事件的替代,它在启动期间处理任务和服务的启动,在关闭期间停止它们并在系统运行时监督它们。

如果您有这样的应用程序(例如):

// app.js
var express = require('express')  
var app = express()  
var port = process.env.PORT

app.get('/', function(req, res) {  
  res.send('Hello world!')
})

app.listen(port)

这样package.json

{
  "name": "my-awesome-app",
  "version": "1.0.0",
  "dependencies": {
     "express": "^4.13.3"
  },
  "scripts": {
     "start": "node app.js"
  }
}

我们使用以下代码创建一个名为myAwesomeApp.conf的upstart配置文件:

start on runlevel [2345]  
stop on runlevel [!2345]

respawn  
respawn limit 10 5

setuid ubuntu  
chdir /opt/myAwesomeApp.conf

env PORT=3000

exec npm start 

要完成,请将您的应用程序(app.jspackage.json)放入/opt/myAwesomeApp.conf并将配置文件myAwesomeApp.conf复制到/ etc / init /

这就是全部,现在您只需运行service myAwesomeApp start即可将节点应用程序作为服务运行

答案 3 :(得分:0)

我之前从未使用过procd,但它可能需要node的完整路径(例如/usr/bin/node)。假设您要运行的文件是procd_set_param command /usr/bin/node /www/www-blink.js,则需要使该行与/www/www-blink.js类似。您可以通过运行which nodetype -a node来找到节点。