我使用node-windows将我的节点应用程序作为服务运行。因为我打算使用node-expose-sspi,所以我用powershell创建了一个service account (我检查了一下Test-ADServiceAccount)。
如果我运行这段代码
var Service = require('node-windows').Service;
// Create a new service object
var svc = new Service({
name:'project-name',
description: 'node server',
script: 'C:\\server\\server.js'
, allowServiceLogon: true
// ,
// env:{
// name: "NODE_ENV",
// value: "production"
// }
});
// Listen for the "install" event, which indicates the
// process is available as a service.
svc.on('install',function(){
svc.start();
});
// Just in case this file is run twice.
svc.on('alreadyinstalled',function(){
console.log('This service is already installed.');
});
// Listen for the "start" event and let us know when the
// process has actually started working.
svc.on('start',function(){
console.log(svc.name+' started!\nVisit http://127.0.0.1:5000 to see it in action.');
});
// Install the script as a service.
svc.install();我收到控制台日志'project-name started...‘但是服务没有被创建(我检查了get-process)。如果我省略了'allowServiceLogon: true‘,服务就会被创建。
如何在node-windows中指定服务帐户?
发布于 2021-09-17 19:40:51
语法
node-windows v1.1.8似乎使用的是winsw版本2,因此您需要根据此xmlConfigFile.md设置选项(不要忘记$-sign)。
<serviceaccount>
<domain>YOURDOMAIN</domain>
<user>gmsa_account$</user>
<allowservicelogon>true</allowservicelogon>
</serviceaccount>故障排除
如果没有创建服务,则是因为gMSA没有足够的权限a)节点窗口的npm文件夹(如果是全局安装的,则应该是C:\Users\username\AppData\Roaming\npm ),b) npm文件夹的“入口点”(C:\Users\username)以及您的节点app.js所在的文件夹(例如C:\projects\myserverproject)。您至少需要具有写入权限。此外,将不会创建守护程序文件夹(C:\projects\myserverproject\daemon)中的windows节点日志文件!这使得故障排除变得更加困难。用户LocalService也是如此。
我的建议
如果完全省略allowServiceLogon和其他登录属性,则服务将被创建为LocalSystem。LocalSystem具有足够的权限。现在您可以在Windows GUI中将LocalSystem更改为gMSA (搜索“services.msc”)。如果gMSA没有足够的权限,服务将启动,但会立即停止。然后,您可以在事件查看器中找到错误日志。错误日志将告诉您需要向哪些文件夹添加权限。

https://stackoverflow.com/questions/69181084
复制相似问题