gpt4 book ai didi

javascript - NodeJS 脚本作为 Windows 服务运行。无法写入文件

转载 作者:太空宇宙 更新时间:2023-11-03 21:55:33 25 4
gpt4 key购买 nike

我有一个用 Node 编写的脚本来处理一些基本的服务器操作。然后,我使用 node-windows 包将此脚本作为服务运行。该脚本的一部分写入日志文件。通过命令行正常运行脚本时一切正常。但是,当作为服务运行时,不会将任何内容写入日志文件。最初我认为这可能是一个路径问题,但事实似乎并非如此。有其他人有过这方面的经验吗?您对如何解决这个问题有什么建议吗?

最佳答案

当使用node-windows时,写入日志文件的路径应该是绝对路径而不是相对路径。这是因为 node-windows 将您的代码包装在守护进程中,然后从其位置运行您的代码,您的代码使用 child-process.fork() 运行。 。因此,如果您的日志路径是相对的,您就会遇到这个问题。我建议将 NodeJS 应用程序所在的目录设置为 node-windows 安装脚本中的环境变量。这样做的好处是您可以引用环境变量来获取目录的绝对路径,然后使用从环境变量返回的值作为日志路径的前缀。请参阅下面的代码示例。

安装.js

'use strict';

const Service = require('node-windows').Service;
const path = require('path');

const svc = new Service({
name: 'Logger',
description: 'Log software',
script: path.join(process.cwd(), 'index.js'),
env: [
{
name: 'APP_DIR_PATH',
value: process.cwd()
}
]
});

svc.on('install', () => {
console.log(`${svc.name} installed`);
});

svc.on('alreadyinstalled', () => {
console.log(`{svc.name} already installed`);
});

svc.install();

app-logger.js

const appDir = process.env.APP_DIR_PATH;
const path = require('path');
const logPath = path.join(appDir, '/logs/log.txt');
const fs = require('fs');

module.exports = function insertLog(entryText, callback) {
let entry = { timestamp: (new Date()), text: entryText };

fs.appendFile(logPath, JSON.stringify(entry), callback);
}

关于javascript - NodeJS 脚本作为 Windows 服务运行。无法写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42212924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com