【发布时间】:2013-12-06 16:13:02
【问题描述】:
我正在尝试运行一个节点脚本,该脚本使用永远监视器在子目录 ./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', {,它会运行,但我宁愿不对目录进行硬编码。
我正在使用: 永远监控 1.2.3
如何让它在 linux 上运行?
编辑 - 添加上述问题的示例并更改目录和脚本的名称,也许/host/host.js 会引起一些混乱。改用/childDir/script.js。
父脚本以/home/ec2-user/test/parentScript.js运行
它使用forever-monitor调用子脚本/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 仅在以下情况下才会触发 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"
});
【问题讨论】: