我正在尝试运行一个节点脚本,该脚本使用forever-monitor在子目录./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'
所以我看到的可能性是。
我认为其中一个选项应该适用于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"
});
答案 0 :(得分:2)
设置sourceDir
选项而不是cwd
选项,您应该得到您想要达到的结果。 cwd
用于最终调用child_process.spawn
,而sourceDir
用于查找子脚本所在的位置。请注意,您需要使用__dirname
和path.resolve()
的组合来规范路径。
你这样运行你的脚本:
/home/user$ node startup.js
将运行cwd
的节点进程的startup.js
设置为/home/user
。因此,如果您在该目录中使用host.js
运行上面的命令,其中startup.js
文件如下所示:
// startup.js
var child = new (forever.Monitor)('host.js', {
max: 1,
silent: false,
options: []
});
它有cwd
/home/user
,而host.js
位于该目录中,一切都很好。
如果你像
那样开始/home/user/some/other/path$ node /home/user/startup.js
然后cwd
脚本的startup.js
是/ home / user / some / other / path,因此在其cwd中找不到host.js
。因此,在这种情况下,我们必须将sourceDir
定义为host.js
的位置/home/user