【问题标题】:How do i reboot linux from nodejs我如何从nodejs重新启动linux
【发布时间】:2014-05-26 18:19:28
【问题描述】:

我想从 node.js 脚本重新启动/关闭我的 linux 操作系统。只有我能找到的东西是停止快速服务器或脚本中正在运行的函数的方法,而不是关闭/重启我的洞 linux 的方法。

有什么办法吗?

【问题讨论】:

    标签: linux node.js


    【解决方案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
    

    【讨论】:

    【解决方案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_processsudo /sbin/reboot 之类的命令。您还需要配置 sudo 以允许 node.js 用户在没有密码提示的情况下运行 /sbin/reboot。见/etc/sudoers

    【讨论】:

      【解决方案4】:

      重新启动包完全符合您的要求,可在此处找到:

      https://www.npmjs.com/package/reboot

      【讨论】:

        猜你喜欢
        • 2014-07-28
        • 2019-11-11
        • 1970-01-01
        • 2023-03-30
        • 2021-06-22
        • 1970-01-01
        • 1970-01-01
        • 2016-10-04
        • 2013-11-10
        相关资源
        最近更新 更多