javascript - 创建了一个 Windows 服务来运行我的节点应用程序,但服务在启动几秒钟后停止运行
问题描述
已经有一个关于这个主题的线程(here),但它没有回答我的情况(大多数答案都提出了替代节点窗口的建议,而不是解决它创建的服务停止运行的原因)。
正如标题所说,我使用 node-windows 包来创建服务(运行我的节点应用程序脚本)。它在本地运行,但是当我将它安装在 Windows 2012 服务器上时,该服务在启动后几秒钟后停止。
以下是在事件查看器中发现的错误:
- 开始 D:\Program Files\nodejs\node.exe --harmony "D:\Program Files\otherApps\create-windows-service-for-nodejs\node_modules\node-windows\lib\wrapper.js" --file " D:\Program Files\path\to\my\application\index.js" --log "Node.js 服务管理 API 包装器" --grow 0.25 --wait 1 --maxrestarts 3 --abortonerror n --stopparentfirst undefined
- 服务启动成功。
- 开始 D:\Program Files\path\to\my\application\index.js
- D:\Program Files\path\to\my\application\index.js 停止运行。
- 意外退出后重新启动 1250 毫秒;尝试 = 1
- D:\Program Files\path\to\my\application\index.js 停止运行。
- 意外退出后重新启动 1562.5 毫秒;尝试 = 2
- 子进程 [5800 - D:\Program Files\nodejs\node.exe --harmony "D:\Program Files\otherApps\create-windows-service-for-nodejs\node_modules\node-windows\lib\wrapper.js" --file "D:\Program Files\path\to\my\application\index.js" --log "Node.js 服务管理 API 包装器" --grow 0.25 --wait 1 --maxrestarts 3 --abortonerror
这是我对节点窗口的实现:
var Service = require('node-windows').Service;
var svc = new Service({
name:'Node.js Service Management API',
description: 'The nodejs.org service management api.',
script: 'D:\\Program Files\\nodeApps\\service-management-api\\server\\server.js'
});
svc.on('install',function(){
svc.start();
console.log('Install complete');
console.log('The service exists: ', svc.exists)
});
svc.install();
关于如何修复此服务使其保持“开启”的任何建议?这是我对节点窗口的实现吗?或者可能是一些 Windows Server 2012 配置问题?
谢谢!
解决方案
这不是最令人满意的解决方案,但我们通过简单地删除整个 node-windows 应用程序并从头开始来解决它。现在可以了。我们还将它嵌套在我们使用此服务自动化的实际节点应用程序中,但我认为这与它现在可以工作的事实没有任何关系。这是处于最终状态的代码:
var Service = require('node-windows').Service;
// Create a new service object
var svc = new Service({
name:'Node.js Service Management API',
description: 'The nodejs.org service management api.',
script: 'D:\\Program Files\\nodeApps\\service-management-api\\server\\server.js'
});
// Listen for the "install" event, which indicates the
// process is available as a service.
svc.on('install',function(){
svc.start();
});
svc.install();
我们还创建了一个单独的“卸载”模块,除了“svc.on”函数将“卸载”而不是“安装”作为其第一个参数之外,它完全相同。
希望这可以帮助某人,如果他们发现自己处于同样的情况。
推荐阅读
- cloud - 即使会话终止,也可以在 Google Cloud Shell 中运行程序
- amazon-redshift - Redshift - 从 STL_QUERY_METRICS 到百分比的 CPU 时间
- javascript - 根据对象数组中的属性过滤掉非空和未定义的项目
- mongodb - 使用聚合文档查找日期可以在多个范围内的文档
- makefile - Makefile 更改目录并调用 git 函数
- node.js - 存根 express-jwt(用于身份验证的中间件)库
- javascript - A-frame 持续为 gltf 设置动画以转到相机 A-frame 的位置
- mysql - 无法设置 myphpadmin 的密码
- amazon-web-services - 使用自定义缓存键时创建 CloudFront 失效
- java - 正则表达式捕获单词和字符第一次出现之间的字符串