NodeJS:调用 shell 脚本时出现 ENOENT 错误

NodeJS: ENOENT error on calling a shell script

以下是我在尝试 运行 位于 /var/www/nodejs/restart-server.sh 的 shell 脚本时收到的错误。

exec error: { Error: spawn sh /var/www/nodejs/restart-server.sh ENOENT
    at _errnoException (util.js:1022:11)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:190:19)
    at onErrorNT (internal/child_process.js:372:16)
    at _combinedTickCallback (internal/process/next_tick.js:138:11)
    at process._tickCallback (internal/process/next_tick.js:180:9)
  code: 'ENOENT',
  errno: 'ENOENT',
  syscall: 'spawn sh /var/www/nodejs/restart-server.sh',
  path: 'sh /var/www/nodejs/restart-server.sh',
  spawnargs: [],
  cmd: 'sh /var/www/nodejs/restart-server.sh' }

路径是故意从根 (/) 开始的。如果我执行此 sh /var/www/nodejs/restart-server.sh 而不是 运行ning NodeJS,它会起作用。但是 NodeJS 似乎无法 运行 它。

我发现的大多数答案都说这是因为文件路径不正确,或者因为他们正在调用相对路径,就好像它是根路径一样。但是我特意调用了一个根路径,这个路径就是正确的根路径。我找不到任何其他答案。

代码

var exec = require('child_process').execFile;

var restartScript = exec('sh /var/www/nodejs/restart-server.sh',
    (error, stdout, stderr) => {
        console.log(stdout);
        console.log(stderr);
        if (error !== null) {
            console.log('exec error:', error);
        }
    });

发现问题

我忘了把 .execFile 改成 .exec

我忘了把 .execFile 改成 .exec