我正在尝试让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。但是,当我尝试使用和永远(-service)命令时,它说
-ash: forever: not found
我尝试过其他一些东西,但没有任何效果。任何帮助将不胜感激。
- 我还需要能够使用npm start
而不是node app
启动我的快速脚本,但我想首先要让它完全正常工作。
答案 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.js
和package.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 node
或type -a node
来找到节点。