Node exec 没有执行脚本的权限
Node exec doesn't have permission to execute script
直到最近,它都运行良好,但是当我今天尝试使用它时,它无法正常运行。它 returns 出现以下错误:
Error: Command failed: /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:
Permission denied
我非常困惑,因为当我尝试从命令行 运行 脚本时,它运行得很好; /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) 确保您尝试执行的脚本是可执行的,例如:chmod +x /folder/script
2) 许多 Linux
发行版的默认终端 shell 是 bash
。您显示的错误包括使用 /bin/sh -c
,这在许多 Linux
发行版中默认为 dash
(是的,终端和 运行 的默认值不同 shell
没有终端的脚本)。因此,由于它似乎在 bash
中有效,请尝试使用 bash -c /folder/script
.
调用脚本
直到最近,它都运行良好,但是当我今天尝试使用它时,它无法正常运行。它 returns 出现以下错误:
Error: Command failed: /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: Permission denied
我非常困惑,因为当我尝试从命令行 运行 脚本时,它运行得很好; /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) 确保您尝试执行的脚本是可执行的,例如:chmod +x /folder/script
2) 许多 Linux
发行版的默认终端 shell 是 bash
。您显示的错误包括使用 /bin/sh -c
,这在许多 Linux
发行版中默认为 dash
(是的,终端和 运行 的默认值不同 shell
没有终端的脚本)。因此,由于它似乎在 bash
中有效,请尝试使用 bash -c /folder/script
.