Я пытаюсь запустить сценарий узла, который запускает другие сценарии в дочернем каталоге ./host, используя постоянный монитор.
В винде это работает
var child = new (forever.Monitor)('host.js', {
max: 1,
silent: false,
options: [],
cwd:"./host"
});
В линуксе я получаю
/home/ec2-user/test/node_modules/forever-monitor/node_modules/broadway/node_modules/eventemitter2/lib/eventemitter2.js:283
throw arguments[1]; // Unhandled 'error' event
^
Error: Target script does not exist: host.js
at /home/ec2-user/test/node_modules/forever-monitor/lib/forever-monitor/monitor.js:144:26
at process._tickCallback (node.js:415:13)
at Function.Module.runMain (module.js:499:11)
at startup (node.js:119:16)
at node.js:901:3
Если я изменю первую строку на var child = new (forever.Monitor)('./host/host.js', {
, я теперь получу
Error: Cannot find module '/home/ec2-user/test/host/host/host.js'
если я использую child = new (forever.Monitor)('/home/ec2-user/test/host/host.js', {
, он запускается, но я бы не хотел жестко кодировать каталог.
Я использую: навсегда-монитор 1.2.3
Как мне заставить это работать на linux?
Редактировать - добавление примеров вышеописанной проблемы с изменением названий директорий и скрипта, возможно /host/host.js
вызывает некоторую путаницу. Вместо этого используйте /childDir/script.js
.
Родительский скрипт работает как /home/ec2-user/test/parentScript.js
Он вызывает дочерний скрипт /home/ec2-user/test/childDir/script.js
с помощью forever-monitor.
Первый пример вверху отлично работает в Windows, но в Linux он игнорирует параметр cwd и выдает Error: Target script does not exist: script.js
Если я добавлю каталог в вызов скрипта (то же самое происходит с использованием sourceDir.)
var child = new (forever.Monitor)('./childDir/script.js', {
cwd теперь добавляется к вызову, из-за чего он пропускает каталог, в котором находится скрипт, и не находит скрипт.
Error: Cannot find module '/home/ec2-user/test/childDir/childDir/script.js'
Так что возможности я вижу.
- При работе в Linux существует ошибка, из-за которой cwd срабатывает только в том случае, если forever-monitor обнаруживает изменение каталога.
- Существует ошибка при работе как в Linux, так и в Windows, где cwd не предназначен для изменения пути к вызываемому скрипту, но в Windows # 1 этого не происходит, и он всегда добавляется к пути скрипта.
- Я совершенно неправильно понимаю, как это должно работать.
Я предполагаю, что один из этих вариантов должен работать как в Windows, так и в Linux. Каков правильный способ сделать это?
var child = new (forever.Monitor)('script.js', {
max: 1,
silent: false,
options: [],
cwd:"./childDir"
});
или (при условии, что cwd не должен изменять исходный каталог скрипта)
var child = new (forever.Monitor)('script.js', {
max: 1,
silent: false,
options: [],
sourceDir:"./childDir",
cwd:"./childDir"
});