我不断使用nodejs运行一些服务器脚本(在不同的端口上).
其中一些服务器上有大量的流量.我用于跟踪连接异常的console.log命令导致我不需要一直都需要的膨胀日志文件 - 仅用于调试.我一直在深夜手动停止脚本,截断文件,然后重新启动它们.这不会长期,所以我们决定找到一个解决方案.
我的系统中的其他人在我不知情的情况下删除了我为每个服务器设置的日志文件.在命令行上调用永远列表显示服务器脚本仍在运行,但现在我无法查看日志文件以查看节点的运行情况.
节点停机时间应该保持在最低限度,所以我不愿意在白天停止服务器超过几分钟.来自客户端的初始测试似乎表明脚本运行正常,但我不能100%确定没有因为尝试登录到不存在的文件失败而导致错误.
我实际上有几个问题:
谢谢你的时间.
我正在尝试为我的节点服务器编写一个launchd.plist文件.我正在使用永远运行我的节点服务器.我希望服务器在启动时启动.我还想等待mongodb launchd plist先行.
我使用自制软件安装了mongobb,它已经附带了launchd.plist.我执行了以下操作:
$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist
Run Code Online (Sandbox Code Playgroud)
mongodb的plist是:
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>homebrew.mxcl.mongodb</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/opt/mongodb/mongod</string>
<string>run</string>
<string>--config</string>
<string>/usr/local/etc/mongod.conf</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<false/>
<key>WorkingDirectory</key>
<string>/usr/local</string>
<key>StandardErrorPath</key>
<string>/usr/local/var/log/mongodb/output.log</string>
<key>StandardOutPath</key>
<string>/usr/local/var/log/mongodb/output.log</string>
<key>HardResourceLimits</key>
<dict>
<key>NumberOfFiles</key>
<integer>1024</integer>
</dict>
<key>SoftResourceLimits</key>
<dict>
<key>NumberOfFiles</key>
<integer>1024</integer>
</dict>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)
如果我关闭计算机并重新启动mongodb应该启动它.
但是我的节点服务器没有启动.有任何想法吗?
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>KeepAlive</key>
<dict>
<key>SuccessfulExit</key>
<false/>
</dict>
<key>Label</key>
<string>com.test.app</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/forever</string>
<string>-a</string>
<string>-l</string>
<string>/var/log/app/app.log</string>
<string>-e</string>
<string>/var/log/app/app_error.log</string> …Run Code Online (Sandbox Code Playgroud) 这应该很简单,但我找不到一种方法来为node.js错误日志添加时间戳.我不是在讨论console.*的输出,而是异常发出的错误.
我正在运行我的应用程序永远,它将错误输出到一个单独的日志,我无法确定错误发生的时间 - 这就是我想添加时间戳的原因.
有人能指出我正确的方向吗?
我通过watchin文件永远重启node.js服务器.每隔几分钟我收到消息:
error: restarting script because .git/FETCH_HEAD changed重启我的服务器.
怎么避免呢?它应该在文件更改时重新启动而不是git head change.
看剧本:
HOME=/root forever \
--pidFile $PIDFILE \
-a \
-l $LOGFILE \
--minUptime $MIN_UPTIME \
--spinSleepTime $SPIN_SLEEP_TIME \
--watch \
--watchDirectory=$APPLICATION_PATH \
start $APPLICATION_PATH$APPLICATION_SCRIPT 2>&1 > /dev/null &
RETVAL=$?
log_end_msg $RETVAL
Run Code Online (Sandbox Code Playgroud) 我有一个节点聊天应用程序需要在我的服务器(带有 nginx 的 ubuntu)上保持运行。问题是应用程序会在几小时或几天后停止。当我检查服务器时,我发现我的 pm2 列表是空的。
我用来启动我的应用程序的代码:
pm2 start notification_server/index.js
Run Code Online (Sandbox Code Playgroud)
不知何故,似乎 pm2 在一段时间后被重置。我也尝试过使用forever,但后来遇到了同样的问题。有什么方法可以防止 pm2 列表变空吗?
我终于完成了将我的一个项目转换为使用Node.JS,但现在我在服务器上运行我的应用程序时出现问题:/问题是如果我关闭我的putty会话节点就停止了.
我已经做了很多关于这个问题的搜索,似乎创建一个upstart脚本并使用该Forever模块是要走的路.
我开始谷歌搜索并创建了这个新贵脚本:
#!upstart
description "Loner NodeJS app launcher"
author "me@me.com"
start on startup
stop on shutdown
script
export HOME="/root"
exec sudo node /home/jjmpsp/server.js >> /home/jjmpsp/server.sys.log 2>&1
end script
Run Code Online (Sandbox Code Playgroud)
然后我start app昨晚在服务器上运行,当我关闭putty会话时服务器仍在运行.都好.
但是,我今天早上来了,发现Node应用已停止,所以我检查了server.sys.log文件,看看发生了什么.似乎该应用程序运行良好,直到它最终遇到此异常:
debug: client authorized
info: handshake authorized fziLHZA3Vo9i55eubvOq
events.js:48
throw arguments[1]; // Unhandled 'error' event
^
Error: Connection lost: The server closed the connection.
at Protocol.end (/home/jjmpsp/node_modules/mysql/lib/protocol/Protocol.js:73:13)
at Socket.onend (stream.js:80:10)
at Socket.emit (events.js:88:20)
at TCP.onread (net.js:348:51)
Run Code Online (Sandbox Code Playgroud)
今天我一直在谷歌搜索更多,并发现Forever实际上会重新启动NodeJS应用程序,如果它意外退出.我尝试安装模块npm install forever但是我得到了这个巨大的错误列表: …
我有一个问题,node.js运行一个小型Web服务器来提供文件系统中的文件.当它启动时,node server.js它就像一个魅力,但当用nohup启动它或永远node.js找不到文件.
我在OpenShift的免费套餐上部署了我的第一个Node.js应用程序,它运行良好.
OpenShift会在崩溃时自动重启我的Node应用程序,还是我必须设置Forever.js?我尝试设置它,它不会工作.运行后node_modules/forever/bin/forever start app.js(工作目录是app-root/repo本地副本forever)我得到了这个输出:
warn: --minUptime not set. Defaulting to: 1000ms
warn: --spinSleepTime not set. Your script will exit if it does not stay up for at least 1000ms
info: Forever processing file: app.js
fs.js:240
return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
^
Error: ENOENT, no such file or directory '/var/lib/openshift/5397416f5004466c0b000080/.forever/VQMF.log'
at Object.openSync (fs.js:240:18)
at Object.startDaemon (/var/lib/openshift/5397416f5004466c0b000080/app-root/runtime/repo/node_modules/forever/lib/forever.js:406:14)
at /var/lib/openshift/5397416f5004466c0b000080/app-root/runtime/repo/node_modules/forever/lib/forever/cli.js:258:13
at /var/lib/openshift/5397416f5004466c0b000080/app-root/runtime/repo/node_modules/forever/lib/forever/cli.js:145:5
at Object.oncomplete (/var/lib/openshift/5397416f5004466c0b000080/app-root/runtime/repo/node_modules/forever/lib/forever.js:358:11)
Run Code Online (Sandbox Code Playgroud)
那么,OpenShift是否为我管理我的应用程序的运行状况,或者我需要让Forever工作吗?如果是的话,对我得到的错误有任何想法吗?
在我的本地节点服务器中,它在任何未捕获的异常上失败,必须手动重新启动.所以本地运行使用forever或pm2.但我的开发服务器是带有Node.Js环境的AWS Elastic Beanstalk.虽然它记录了未捕获的异常并抛出它,但它永远不会终止.即使它终止,它也会自动启动.因此,需要PM2或Forever在AWS Elastic Beanstalk环境中保持node.js永远运行.
amazon-web-services node.js forever pm2 amazon-elastic-beanstalk
我正在使用forever npm 模块运行nodeJS 应用程序。
节点应用程序还连接到 Redis DB 进行缓存检查。API 通常会停止工作,并在永久日志中出现以下错误。
{ ReplyError: Ready check failed: ERR max number of clients reached
at parseError (/home/myapp/core/node_modules/redis/node_modules/redis-parser/lib/parser.js:193:12)
at parseType (/home/myapp/core/node_modules/redis/node_modules/redis-parser/lib/parser.js:303:14)
at JavascriptRedisParser.execute (/home/myapp/ecore/node_modules/redis/node_modules/redis-parser/lib/parser.js:563:20) command: 'INFO', code: 'ERR' }
Run Code Online (Sandbox Code Playgroud)
当我在 redis 服务器上执行client list命令时,它显示太多打开的连接。我还在timeout = 3600我的 Redis 配置中进行了设置。
我的应用程序代码中没有任何未关闭的 Redis 连接对象。
根据应用程序负载,这种情况每周会发生一两次,作为权宜之计,我正在重新启动节点服务器(它可以工作)。
在这种情况下,永久的解决方案是什么?