2013-05-04 87 views
0

如果我從命令行(節點index.js)運行它,它將按預期工作。但是當我從init.d腳本執行這個Node.js(v0.10.4)腳本作爲守護進程時,exec回調中的stdout返回值沒有設置。我該如何解決?爲什麼在以守護進程運行的node.js腳本中執行子進程後,未設置stdout?

Node.js的腳本:

var exec = require('child_process').exec; 
setInterval(function() 
{ 
exec('get_switch_state', function(err, stdout, stderr) 
{ 
     if(stdout == "on") 
     { 
      // Do something. 
     } 
}); 
}, 5000); 

的init.d腳本:

#!/bin/bash 

NODE=/development/nvm/v0.10.4/bin/node 
SERVER_JS_FILE=/home/blahname/app/index.js 
USER=root 
OUT=/home/pi/nodejs.log 

case "$1" in 

start) 
    echo "starting node: $NODE $SERVER_JS_FILE" 
    sudo -u $USER $NODE $SERVER_JS_FILE > $OUT 2>$OUT & 
    ;; 

stop) 
    killall $NODE 
    ;; 

*) 
    echo "usage: $0 (start|stop)" 
esac 

exit 0 
+0

/home/pi/nodejs.log顯示什麼? – user568109 2013-05-04 22:46:14

+0

如果我用'console.log(「got here」)替換'// Do something.',它會顯示「got here」,但是如果我用'console.log(stdout)替換它'它不顯示'on 「在日誌文件中。 – sizzle 2013-05-06 16:47:41

回答

0

我結束了不使用Node.js的EXEC child_process。我修改了上面(/etc/init.d/node-app.sh)中的init.d腳本如下:

#!/bin/bash 

NODE=/home/pi/development/nvm/v0.10.4/bin/node 
SERVER_JS_FILE=/home/pi/development/mysql_test/index.js 
USER=pi 
OUT=/home/pi/development/mysql_test/nodejs.log 

case "$1" in 

start) 
echo "starting node: $NODE $SERVER_JS_FILE" 
sudo -u $USER TZ='PST' $NODE $SERVER_JS_FILE > $OUT 2>$OUT & 
;; 

stop) 
killall $NODE 
;; 

*) 
echo "usage: $0 (start|stop)" 
esac 

exit 0 

這個腳本在啓動和寄託都啓動的Node.js應用「index.js」按預期工作。