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

Linux 如何在openwrt-Arduino上自动启动nodejs应用程序-,linux,node.js,express,arduino,openwrt,Linux,Node.js,Express,Arduino,Openwrt,我正在尝试让nodejs应用程序在系统引导时自动启动。基本上我只需要运行命令node/dir/app。 我正在Arduino云上使用openwrt。并且尝试了一些事情 在openwrt网站上,它说我可以做到这一点 我还尝试将目录更改为/www/www blink.js而不是/ 然而,我不确定我做错了什么,因为当我尝试使用/etc/init.d/node-app start运行它时,没有出现任何问题。我显然写错了代码,但我不确定它应该是什么样子 我尝试过的另一件事是节点模块永久和永久服务。 我使用

我正在尝试让nodejs应用程序在系统引导时自动启动。基本上我只需要运行命令
node/dir/app
。 我正在Arduino云上使用openwrt。并且尝试了一些事情

在openwrt网站上,它说我可以做到这一点

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

然而,我不确定我做错了什么,因为当我尝试使用
/etc/init.d/node-app start运行它时,没有出现任何问题。我显然写错了代码,但我不确定它应该是什么样子

我尝试过的另一件事是节点模块
永久
永久服务
。 我使用
npm安装-g forever
和forever服务在我的计算机上下载了它们。我把它们转移到我的arduino云上的usr/lib/node_模块。然而,当我尝试使用和永久(-service)命令时,它会说

-ash: forever: not found
我尝试了一些其他的方法,但是没有任何效果。任何帮助都将不胜感激


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

你需要像执行
Linux服务一样执行
node
应用程序

非常适合这项任务

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

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

使用
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.js
package.json
)放在
/opt/myAwesomeApp.conf
中,并将配置文件
myAwesomeApp.conf
复制到/etc/init中/


仅此而已,现在您只需运行
service myAwesomeApp start
即可将您的节点应用程序作为服务运行

我以前从未使用过procd,但它可能需要指向
节点
的完整路径(例如,
/usr/bin/node
)。假设要运行的文件是
/www/www/blink.js
,则需要将该行设置为类似于
procd\u set\u param命令/usr/bin/node/www/blink.js
。您可以通过运行
哪个节点
键入-a节点
来定位节点。您可以将启动命令(node/dir/app&)放入/etc/rc.local脚本中。这将在系统启动时自动启动nodejs应用程序。

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}
因此,您只需添加: 程序集参数重新启动60 5 5

或者类似于OpenWRT procd初始化脚本。这60 5 5意味着它将在重新启动之间等待5秒(中间参数),如果它在60秒内重新启动超过5次(最后一个参数)(第一个参数),它将禁用服务(“重新启动循环”检测)

有关更多信息,请参阅本页:

如何将upstart安装到arduino云上?upstart已被systemd取代。尝试过此方法。然而,当我使用
top
时,它仍然没有说什么或显示任何进程。我使用了
/etc/init.d/node-app start
,还尝试了
/etc/init.d/node-app enable
,使用
start=1
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 
# 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}