如何在Ubuntu中作为命令或服务运行可执行文件(使用Node.js child_process.spawn())?

时间:2018-01-11 16:42:34

标签: node.js linux ubuntu executable

首先,类似的问题,没有答案:

Node.js child_process.spawn() fail to run executable file

node.js child_process.spawn ENOENT error - only under supervisord

我有一个.linux扩展名的可执行文件。它是http服务器。

  

service.linux

我可以这样运行:

$ ./service.linux
2018/01/11 18:32:56 listening on port 8080

但由于它不是命令,我无法将其作为一个衍生过程启动:

let cp = spawn('service.linux', [], { cwd: __dirname });

我得到的错误是:

service.linux: command not found

ERROR: Error: spawn service.linux ENOENT

如何将其作为命令运行?或者我应该使用其他命令来运行它,例如:

$ start service.linux

UPD:

$ file service.linux 
service.linux: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, not stripped

UPD:

它需要绝对路径:

const path = require('path');
let cp = spawn(path.resolve(__dirname, `service.linux`), [], { cwd: __dirname });

2 个答案:

答案 0 :(得分:1)

尝试使用Decimal.js并在二进制名称前面写./

const { exec } = require("child_process");

exec("./service.linux", (err, data) => {
    if (err) return console.log(err);
    console.log(data);
});

假设文件与脚本位于同一目录中。

错误ENOENT表示“错误无条目”,因此它基本上找不到命令。

这就是我们指定"./"的原因。这样它就会把它作为一条路径来处理。

答案 1 :(得分:1)

这是一个路径问题,节点无法找到service.linux文件,使用绝对路径,问题将得到解决