2016-04-12 12 views
0

Это может быть очевидно, однако я изо всех сил пытаюсь найти решение.nodejs - каталог для просмотра изменений фона и выполнения некоторых действий

// watch.js 
var fs = require('fs'); 

function watch(dir, config) { 
    fs.watch(dir, { 
    persistent: true, 
    recursive: true 
    }, (event, filename) => { 
    if (filename) { 
     console.log(`filename changed: ${filename}`); 
     // do something 
    } 
    }); 
} 

module.exports = watch 

Я хочу, чтобы запустить этот watch в фоновом режиме, что-то вроде nohup, я смотрел на child_process.spawn, но до сих пор не могу понять использование.

В соответствии с документацией child_process.spawn ожидается аргумент command.

Любой указатель, как я мог его достичь?

Цель - посмотреть каталог изменений фона и выполнить какое-либо действие.

Спасибо!

+0

Что вы имеете в виду "в фоновом режиме"? Node.js является асинхронным; похоже, что вы просто хотите вызвать функцию. – SLaks

+0

Подобно 'nohup', я ожидаю запустить« двоичный », который вернет приглашение в терминале и будет следить за файловой системой. – sarbbottam

+0

Затем вам нужно запустить новый процесс с помощью командной строки. (возможно, 'node somefile.js') – SLaks

ответ

0

Если вы хотите использовать spawn, вы можете разделить свои часы в свой собственный скрипт, а затем создать его из основного сценария. то есть главный скрипт для вывода.

это относится к вашему watch Функция не должна знать ни о чем происходящем в вызывающем процессе.

watcher.js

var fs = require('fs'); 

function watch(dir, config) { 
    fs.watch(dir, { 
    persistent: true, 
    recursive: true 
    }, function(event, filename) { 
    if (filename) { 
     console.log("filename changed: " + filename); //to stdout 
    } 
    }); 
} 

watch('./watchme/'); //<- watching the ./watchme/ directory 

main.js

const spawn = require('child_process').spawn; 
const watch = spawn('node', ['watcher.js']); 

watch.stdout.on('data', function(data) { 
    console.log("stdout: " + data); 
}); 

watch.stderr.on('data', function(data) { 
    console.log("stderr: " + data); 
}); 

watch.on('close', function(code) { 
    console.log("child process exited with code " + code); 
}); 
+0

Как я могу завершить основной процесс, я попробовал с 'options = {detached: true, stdio: ['ignore']}' & 'watch.unref()' – sarbbottam

+0

О, хорошо, поэтому вы просто хотите использовать чтобы запустить другой скрипт. Параметр stdio как массив фактически имеет 3 элемента, которые являются stdin, stdout, stderr respectivley. поэтому вы должны игнорировать все 3 следующим образом: {detached: true, stdio: ['ignore', 'ignore', 'ignore']}. Вы также можете просто использовать String в качестве значения параметров stdio, и это применимо ко всем 3, поэтому: {detached: true, stdio: 'ignore'} будет делать то же самое – KorreyD

+0

, также если вы игнорируете, то stdout.on и stderr .on обработчики вызовут ошибку, поэтому вы захотите удалить их, если используете stdio: 'ignore' – KorreyD