我如何从nodejs重新启动linux
Posted
技术标签:
【中文标题】我如何从nodejs重新启动linux【英文标题】:How do i reboot linux from nodejs 【发布时间】:2014-05-26 18:19:28 【问题描述】:我想从 node.js 脚本重新启动/关闭我的 linux 操作系统。只有我能找到的东西是停止快速服务器或脚本中正在运行的函数的方法,而不是关闭/重启我的洞 linux 的方法。
有什么办法吗?
【问题讨论】:
【参考方案1】: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
添加以下行并将下面 sn-p 中的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
【讨论】:
如果您想知道如何以特定用户身份运行 nodejs,请查看:***.com/questions/13385029/…【参考方案2】:感谢到目前为止。我现在有一个解决方案。只是它没有响应该命令已执行。其余的一切正常。
代码:
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
的原因。
是的,它在 root 中运行,但我不知道如何更改它,因为它是一个 BeagleBoard,其中有一个预安装的操作系统,其中包含所有内容。它有一个自动启动nodejs。我使用cloud9对其进行编程。系统上没有其他东西,所以这不是一个大问题。【参考方案3】:
您应该使用child_process
和sudo /sbin/reboot
之类的命令。您还需要配置 sudo
以允许 node.js 用户在没有密码提示的情况下运行 /sbin/reboot
。见/etc/sudoers
。
【讨论】:
【参考方案4】:重新启动包完全符合您的要求,可在此处找到:
https://www.npmjs.com/package/reboot
【讨论】:
以上是关于我如何从nodejs重新启动linux的主要内容,如果未能解决你的问题,请参考以下文章
Azure Linux Web 应用程序(节点)崩溃并显示消息:“分段错误(核心转储)”并重新启动