2014-04-12 50 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