如何在openwrt上自动启动nodejs应用 - Arduino Yun -
How to start nodejs application automatically on openwrt - Arduino Yun -
我正在尝试让 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
时什么也没有出现 我显然写错了代码,但我不确定是什么它应该完全像。
我尝试过的另一件事是节点模块 forever
和 forever-service
。
我使用 npm install -g forever
和永久服务将它们下载到我的计算机上。我将它们转移到我的 arduino yun 上的 usr/lib/node_modules。但是,当我尝试使用和 forever(-service) 命令时,它说
-ash: forever: not found
我尝试了其他一些方法,但是没有任何效果。任何帮助将不胜感激。
-- 我还需要能够使用 npm start
而不是 node app
来启动我的 express 脚本,但我想首先要做的是让它正常工作。
您需要像 Linux Service
一样执行您的 node
应用程序。
Upstart 非常适合这项任务
Upstart is an event-based replacement for the /sbin/init daemon which handles starting of tasks and services during boot, stopping them during shutdown and supervising them while the system is running.
如果您有这样的应用程序(例如):
// 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.js
和 package.json
)放入 /opt/myAwesomeApp.conf
并将配置文件 myAwesomeApp.conf
复制到 /etc/init/
就这些了,现在您只需要 运行 service myAwesomeApp start
到 运行 您的节点应用程序即服务
我以前从未使用过 procd,但它可能需要 node
的完整路径(例如 /usr/bin/node
)。您需要使该行类似于 procd_set_param command /usr/bin/node /www/www-blink.js
,假设您想要 运行 的文件是 /www/www-blink.js
。您可以通过 运行ning which node
或 type -a node
.
定位节点
你可以把启动命令(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}
所以,你冷只是补充:
procd_set_param 重生 60 5 5
或类似的东西到你的 OpenWRT procd initscript。这个 60 5 5 意味着它将在两次重生之间等待 5 秒(中间参数),如果它在 60 秒(第一个参数)内重生超过 5 次(最后一个参数),它将禁用该服务("restart loop" 检测到)。
有关详细信息,请参阅此页面:
https://openwrt.org/docs/guide-developer/procd-init-scripts
我正在尝试让 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
时什么也没有出现 我显然写错了代码,但我不确定是什么它应该完全像。
我尝试过的另一件事是节点模块 forever
和 forever-service
。
我使用 npm install -g forever
和永久服务将它们下载到我的计算机上。我将它们转移到我的 arduino yun 上的 usr/lib/node_modules。但是,当我尝试使用和 forever(-service) 命令时,它说
-ash: forever: not found
我尝试了其他一些方法,但是没有任何效果。任何帮助将不胜感激。
-- 我还需要能够使用 npm start
而不是 node app
来启动我的 express 脚本,但我想首先要做的是让它正常工作。
您需要像 Linux Service
一样执行您的 node
应用程序。
Upstart 非常适合这项任务
Upstart is an event-based replacement for the /sbin/init daemon which handles starting of tasks and services during boot, stopping them during shutdown and supervising them while the system is running.
如果您有这样的应用程序(例如):
// 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.js
和 package.json
)放入 /opt/myAwesomeApp.conf
并将配置文件 myAwesomeApp.conf
复制到 /etc/init/
就这些了,现在您只需要 运行 service myAwesomeApp start
到 运行 您的节点应用程序即服务
我以前从未使用过 procd,但它可能需要 node
的完整路径(例如 /usr/bin/node
)。您需要使该行类似于 procd_set_param command /usr/bin/node /www/www-blink.js
,假设您想要 运行 的文件是 /www/www-blink.js
。您可以通过 运行ning which node
或 type -a node
.
你可以把启动命令(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}
所以,你冷只是补充: procd_set_param 重生 60 5 5
或类似的东西到你的 OpenWRT procd initscript。这个 60 5 5 意味着它将在两次重生之间等待 5 秒(中间参数),如果它在 60 秒(第一个参数)内重生超过 5 次(最后一个参数),它将禁用该服务("restart loop" 检测到)。
有关详细信息,请参阅此页面: https://openwrt.org/docs/guide-developer/procd-init-scripts