我們結束了使用上永遠放棄,我不能讓它與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