我正在尝试运行一个节点脚本,该脚本使用永远监视器在子目录 ./host 中启动其他脚本。
在 Windows 上这有效
var child = new (forever.Monitor)('host.js', {
max: 1,
silent: false,
options: [],
cwd:"./host"
});
在linux上我得到
/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', {
它运行,但我宁愿不对目录进行硬编码。
我正在使用:forever-monitor 1.2.3
我如何让它在 linux 上工作?
编辑- 添加上述问题的示例并更改目录和脚本的名称,这可能/host/host.js
会引起一些混乱。改为使用/childDir/script.js
。
父脚本运行为/home/ec2-user/test/parentScript.js
/home/ec2-user/test/childDir/script.js
它使用永远监视器调用子脚本。
顶部的第一个示例在 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 仅在永远监视器检测到目录更改时才会触发。
- 在 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"
});