From b7f234a086d67331755f888fb18eb1675542fa00 Mon Sep 17 00:00:00 2001 From: Moe Date: Mon, 20 Jan 2020 12:38:44 -0800 Subject: [PATCH 1/2] snapCmd path fix --- libs/monitor.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/libs/monitor.js b/libs/monitor.js index 4b6ad1a7..2c9297cc 100644 --- a/libs/monitor.js +++ b/libs/monitor.js @@ -139,7 +139,7 @@ module.exports = function(s,config,lang){ var temporaryImageFile = streamDir + s.gid(5) + '.jpg' var iconImageFile = streamDir + 'icon.jpg' var ffmpegCmd = s.splitForFFPMEG(`-loglevel warning -re -probesize 1000000 -analyzeduration 1000000 ${inputOptions.join(' ')} -i "${url}" ${outputOptions.join(' ')} -vframes 1 "${temporaryImageFile}"`) - fs.writeFileSync(s.group[monitor.ke].rawMonitorConfigurations[monitor.id].sdir + 'snapCmd.txt',JSON.stringify({ + fs.writeFileSync(s.group[monitor.ke].activeMonitors[monitor.id].sdir + 'snapCmd.txt',JSON.stringify({ cmd: ffmpegCmd, temporaryImageFile: temporaryImageFile, iconImageFile: iconImageFile, @@ -149,7 +149,7 @@ module.exports = function(s,config,lang){ var cameraCommandParams = [ s.mainDirectory + '/libs/cameraThread/snapshot.js', config.ffmpegDir, - s.group[monitor.ke].rawMonitorConfigurations[monitor.id].sdir + 'snapCmd.txt' + s.group[monitor.ke].activeMonitors[monitor.id].sdir + 'snapCmd.txt' ] var snapProcess = spawn('node',cameraCommandParams,{detached: true}) snapProcess.stderr.on('data',function(data){ @@ -766,11 +766,15 @@ module.exports = function(s,config,lang){ // } var createCameraFolders = function(e,callback){ //set the recording directory + var activeMonitor = s.group[e.ke].activeMonitors[e.id] createStreamDirectory(e,function(err,directory){ + activeMonitor.sdir = directory e.sdir = directory createRecordingDirectory(e,function(err,directory){ + activeMonitor.dir = directory e.dir = directory createTimelapseDirectory(e,function(err,directory){ + activeMonitor.dirTimelapse = directory e.dirTimelapse = directory createFileBinDirectory(e,function(err){ if(callback)callback() @@ -1372,7 +1376,7 @@ module.exports = function(s,config,lang){ if(activeMonitor.fswatchStream && activeMonitor.fswatchStream.close){ activeMonitor.fswatchStream.close() } - activeMonitor.fswatchStream = fs.watch(e.sdir, {encoding : 'utf8'}, () => { + activeMonitor.fswatchStream = fs.watch(activeMonitor.sdir, {encoding : 'utf8'}, () => { resetStreamCheck(e) }) } From 5f0ed0a48663da6ed7843e8819c44fc3eca31cf2 Mon Sep 17 00:00:00 2001 From: Moe Date: Mon, 20 Jan 2020 12:39:17 -0800 Subject: [PATCH 2/2] fix zombie process with SIGTERM event --- libs/cameraThread/singleCamera.js | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/libs/cameraThread/singleCamera.js b/libs/cameraThread/singleCamera.js index 752ffb8f..1c18898d 100644 --- a/libs/cameraThread/singleCamera.js +++ b/libs/cameraThread/singleCamera.js @@ -1,14 +1,8 @@ const fs = require('fs') +const exec = require('child_process').exec const spawn = require('child_process').spawn process.send = process.send || function () {}; -// [CTRL] + [C] = exit -process.on('SIGINT', function() { - if(cameraProcess && cameraProcess.kill)cameraProcess.kill(0) -}); -process.on('exit', (code) => { - if(cameraProcess && cameraProcess.kill)cameraProcess.kill(0) -}); if(!process.argv[2] || !process.argv[3]){ return writeToStderr('Missing FFMPEG Command String or no command operator') @@ -29,10 +23,18 @@ var writeToStderr = function(text){ // fs.appendFileSync('/home/Shinobi/test.log',text + '\n','utf8') } } + +// [CTRL] + [C] = exit process.on('uncaughtException', function (err) { writeToStderr('Uncaught Exception occured!'); writeToStderr(err.stack); }); +const exitAction = function(){ + process.kill(-cameraProcess.pid) +} +process.on('SIGTERM', exitAction); +process.on('SIGINT', exitAction); +process.on('exit', exitAction); for(var i=0; i < stdioPipes; i++){ switch(i){