2014-04-12 52 views
3

我想从node.js脚本重新启动/关闭我的linux操作系统。只有在我能找到的东西方法停止快速服务器或脚本内的运行功能,但不是关闭/重新启动我的洞Linux的方式。如何从nodejs重新启动linux

有没有办法做到这一点?

回答

0

你应该使用child_process和一个像sudo /sbin/reboot这样的命令。您还需要配置sudo以允许node.js用户在没有密码提示的情况下运行/sbin/reboot。见/etc/sudoers

+0

同意。上面添加了更多细节。 http://stackoverflow.com/a/37759757/1550587 –

3

感谢迄今。我现在得到了一个解决方案。只有它没有响应该命令已被执行。其余的工作。

代码:

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); 
}); 
+1

可能,您的Node.js服务器是由root执行的,不是吗?这是一种安全漏洞:)(实际上,这不是一个漏洞,而是一个入侵者以超级用户的身份自动获取主机的潜在威胁,你可能永远不会注意到这种入侵)。这就是为什么我提到'sudo'。 – user3159253

+0

是的,它运行在根目录下,但我不知道如何改变它,因为它是一个预安装了操作系统的[BeagleBoard](http://beagleboard.org/Products/BeagleBone%20Black)。它有一个自动启动nodejs。我使用cloud9进行编程。系统上没有els,所以它不是一个大问题。 – Paules

3

的的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