如何从nodejs重新启动linux

如何从nodejs重新启动linux,linux,node.js,Linux,Node.js,我想从node.js脚本重新启动/关闭linux操作系统。我只能找到停止express服务器或脚本中正在运行的函数的方法,但无法关闭/重新启动我的linux 有什么方法可以做到这一点吗?您应该使用和类似于sudo/sbin/reboot的命令。您还需要配置sudo,以允许node.js用户在没有密码提示的情况下运行/sbin/reboot。请参阅/etc/sudoers感谢您的支持。我现在有了一个解决方案。只有它没有响应命令已被执行。对于其他人来说,它正在发挥作用 代码: Reboot软件包完全

我想从node.js脚本重新启动/关闭linux操作系统。我只能找到停止express服务器或脚本中正在运行的函数的方法,但无法关闭/重新启动我的linux


有什么方法可以做到这一点吗?

您应该使用和类似于
sudo/sbin/reboot
的命令。您还需要配置
sudo
,以允许node.js用户在没有密码提示的情况下运行
/sbin/reboot
。请参阅
/etc/sudoers

感谢您的支持。我现在有了一个解决方案。只有它没有响应命令已被执行。对于其他人来说,它正在发挥作用

代码:


Reboot软件包完全符合您的要求,可在此处找到:

nodejs命令是:

require('child_process').exec('sudo /sbin/shutdown -r now', function (msg) { console.log(msg) });
要避免以su方式运行nodejs,必须授予运行此命令的权限。通过在/etc/sudoers.d/目录下创建文件来授予权限,例如

$ sudo /etc/sudoers.d/mysudoersfile
添加以下行,并将下面代码段中的
pi
更改为用户nodejs将作为运行状态:

pi ALL=/sbin/shutdown
pi ALL=NOPASSWD: /sbin/shutdown
此技术也可以应用于其他命令。例如,如果您希望允许用户(依次是nodejs)重新启动网络,则将以下内容添加到sudoers文件中

pi ALL=/etc/init.d/networking
pi ALL=NOPASSWD: /etc/init.d/networking

很可能,Node.js服务器是由root用户执行的,不是吗?这是一种安全漏洞:)(实际上,这不是一个漏洞,而是一种潜在的威胁,入侵者会自动以超级用户身份访问您的主机,您可能永远不会注意到这种入侵)。这就是我提到sudo的原因。是的,它运行在root中,但我不知道如何更改它,因为它是一个预装操作系统,其中包含所有内容。它有一个自动启动节点。我使用cloud9来编程。系统上没有els,因此这不是一个大问题。如果您想知道如何作为特定用户运行nodejs,请查看以下内容:
pi ALL=/etc/init.d/networking
pi ALL=NOPASSWD: /etc/init.d/networking