我想从node.js脚本重新启动/关闭我的linux操作系统。只有在我能找到的东西方法停止快速服务器或脚本内的运行功能,但不是关闭/重新启动我的洞Linux的方式。如何从nodejs重新启动linux
有没有办法做到这一点?
我想从node.js脚本重新启动/关闭我的linux操作系统。只有在我能找到的东西方法停止快速服务器或脚本内的运行功能,但不是关闭/重新启动我的洞Linux的方式。如何从nodejs重新启动linux
有没有办法做到这一点?
你应该使用child_process
和一个像sudo /sbin/reboot
这样的命令。您还需要配置sudo
以允许node.js用户在没有密码提示的情况下运行/sbin/reboot
。见/etc/sudoers
。
感谢迄今。我现在得到了一个解决方案。只有它没有响应该命令已被执行。其余的工作。
代码:
console.log('loaded.....');
var exec = require('child_process').exec;
function execute(command, callback){
exec(command, function(error, stdout, stderr){ callback(stdout); });
}
execute('shutdown -r now', function(callback){
console.log(callback);
});
可能,您的Node.js服务器是由root执行的,不是吗?这是一种安全漏洞:)(实际上,这不是一个漏洞,而是一个入侵者以超级用户的身份自动获取主机的潜在威胁,你可能永远不会注意到这种入侵)。这就是为什么我提到'sudo'。 – user3159253
是的,它运行在根目录下,但我不知道如何改变它,因为它是一个预安装了操作系统的[BeagleBoard](http://beagleboard.org/Products/BeagleBone%20Black)。它有一个自动启动nodejs。我使用cloud9进行编程。系统上没有els,所以它不是一个大问题。 – Paules
的的NodeJS命令是:
require('child_process').exec('sudo /sbin/shutdown -r now', function (msg) { console.log(msg) });
要避免运行nodejs,因为您必须授予运行此命令的权限。通过在/etc/sudoers.d/目录下创建文件来授予权限,例如
$ sudo /etc/sudoers.d/mysudoersfile
添加以下行并改变在下面的代码段给用户的NodeJS pi
将被运行:
pi ALL=/sbin/shutdown
pi ALL=NOPASSWD: /sbin/shutdown
这种技术也可以应用于其他的命令。例如,如果您想允许用户(依次为nodejs)重新启动网络,请将以下内容添加到sudoers文件中。
pi ALL=/etc/init.d/networking
pi ALL=NOPASSWD: /etc/init.d/networking
同意。上面添加了更多细节。 http://stackoverflow.com/a/37759757/1550587 –