Node exec没有执行脚本的权限

时间:2017-05-05 23:34:54

标签: javascript node.js linux raspberry-pi3

直到最近,它运行良好,但是当我今天尝试使用它时,它无法正常工作。它返回以下错误:

  

错误:命令失败:/ bin / sh -c   /home/pi/RPi-Computer-Power/RPi-Server/routes/../scripts/hash.js   12345678 / bin / sh:1:   /home/pi/RPi-Computer-Power/RPi-Server/routes/../scripts/hash.js:   许可被拒绝

我非常困惑,因为当我尝试从命令行运行脚本时,它运行得很好; /home/pi/RPi-Computer-Power/RPi-Server/routes/../scripts/hash.js 12345执行完美。

这是我尝试执行脚本的代码。 (index.js)

exec(__dirname+"/../scripts/"+req.params.script+" "+req.body.params, function(err, stdout, stderr) {
        console.log("err: ",err,"stdout: ",stdout,"stderr: ",stderr);
        if(err){
          res.send("<a href='/'>< Back</a> <b>Program Error:</b> "+err.toString());
          return;
        }
        //res.send("<a href='/'>< Back</a> <b>Program Output:</b> <div style='white-space:pre-line>'"+stdout+stderr+"</div>");
        res.render("programOutput", {output: stdout});
      });

如果有人有任何帮助,请提前感谢您。 尼尔

1 个答案:

答案 0 :(得分:3)

我想到了两件事:

1)确保您尝试执行的脚本可执行文件:chmod +x /folder/script

2)许多Linux发行版的默认终端shell为bash。您显示的错误包括使用/bin/sh -c,这会在Linux的许多dash版本中默认为(是,终端的默认shell和运行没有终端的脚本)。因此,由于它似乎适用于bash,因此请尝试使用bash -c /folder/script唤起脚本。