已经有一个关于这个主题的线程(这里(,但它没有回答我的情况(大多数答案都提出了节点窗口替代方案的建议,而不是解决为什么它创建的服务停止运行(。
就像标题所说,我使用 node-windows 包创建了一个服务(运行我的节点应用程序脚本(。 它在本地运行,但是当我将其安装在Windows 2012服务器上时,该服务在启动几秒钟后停止。
下面是在事件查看器中发现的错误:
起始 D:\Program Filesodejsode.exe --harmony "D:\Program Files\- otherApps\create-windows-service-for-nodejsode_modulesode-windows\lib\wrapper.js" --file "D:\Program Files\path\to\my\application\index.js" --log "Node.js Service Management API wrapper" --grow 0.25 --wait 1 --maxrestarts 3 --abortonerror n --stopparentfirst undefined
- 服务已成功启动。
- 起始 D:\程序文件\路径\到\my\应用程序\索引.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 Filesodejsode.exe --harmony "D:\Program Files\
- otherApps\create-windows-service-for-nodejsode_modulesode-windows\lib\wrapper.js" --file "D:\Program Files\path\to\my\application\index.js" --log "Node.js Service Management 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服务器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"函数将第一个参数"卸载"而不是"安装"作为其第一个参数。
希望这对某人有所帮助,如果他们发现自己处于同样的情况。