我们结束了使用上永远放弃,我不能让它与Nodemon正常工作,并在同一时间观看远程目录。我们认为能够在命令上推送代码更改比在服务器崩溃时重启服务更为重要(根本不会经常发生这种情况)。当我们执行代码推送时,无论如何都会重新启动服务器。
我创建了一个名为serverMon.js服务器监控文件,其中包含(见下面的链接代码,我修改为我自己的用途引文):
const fs = require('fs');
const child_process = require('child_process');
//production path
var widgetPath = '\\\\server\\share\\sbSerialWidget\\';
var widgetFiles = ['sbNodeLog.js', 'server.js'];
var passedInFileName, infile, outfile;
for(var i = 0; i < widgetFiles.length; i++){
fs.createReadStream(widgetPath + widgetFiles[i]).pipe(fs.createWriteStream(widgetFiles[i]));
}
//spawn server.js passing it's stdio, stderr, stdout back through this node instance
server = child_process.spawn('node', ['server.js'], {stdio: 'inherit'}, function (error, stdout, stderr) {
if (error) {
console.log(error.stack);
console.log('Error code: ' + error.code);
console.log('Server.js error received: ' + error.signal);
}
console.log('Server.js STDOUT: ' + stdout);
console.log('Server.js STDERR: ' + stderr);
});
server.on('exit', function (code) {
server.kill('SIGTERM');
console.log('Child process exited with exit code '+code);
});
这是通过包含在一个nodemon脚本观看。 VBS文件:
CreateObject("Wscript.Shell").Run "nodemon serverMon.js --exitcrash --watch \\server\share\sbSerialWidget", 0, True
这又是由放置在一个%ProgramData%\Microsoft\Windows\Start Menu\Programs\Startup
CMD脚本运行,因此它会在开机.VBS脚本,所以我们的小部件串联在后台始终运行:
REM @echo off
REM cls
GOTO START
:START
IF EXIST "%ProgramFiles%\sbserialwidget\server.js" GOTO WIN32
IF EXIST "%ProgramFiles(x86)%\sbSerialWidget\server.js" GOTO WIN64
ECHO End start
GOTO END
:WIN32
cls
echo Inside 32 bit
PUSHD "%ProgramFiles%"\sbserialwidget
GOTO RUNVBS
GOTO END
:WIN64
echo Inside 64 bit
PUSHD "%ProgramFiles(x86)%"\sbSerialWidget
GOTO RUNVBS
GOTO END
:RUNVBS
echo Inside RUNVBS
start runNodemon.vbs
GOTO END
:END
popd
EXIT
我们最终在任务管理器运行node.exe,一个运行nodemon的三个实例,这是监控第二,serverMon.js,同时观察上的远程文件的更改,然后第三个服务器。 js作为serverMon.js的子进程启动。
引文:
Copying node files with streams and pipes
Spawning a node child server