2013-05-02 28 views
0

雖然我建設使用詹金斯我的項目,我需要啓動一個服務器的NodeJS進程來承載一些文件,如果我要開始這個過程像下面,構建會掛起無限如何殺死構建後從詹金斯產生的子進程?

<target name="staticserver" description="Starts nodejs static server"> 
    <exec executable="node"> 
     <arg value="${env.WORKSPACE}staticserver.js"/> 
    </exec> 
</target> 

所以我切換到跟隨,並構建將運行良好

<target name="staticserver" description="Starts nodejs static server"> 
    <exec executable="cmd.exe"> 
     <arg value="/c"/> 
     <arg value="start"/> 
     <arg value="node"/> 
     <arg value="${env.WORKSPACE}staticserver.js"/> 
    </exec> 
</target> 

然而,當詹金斯建設完成後,該節點工藝活着離開。

我四處搜尋,但似乎大家的問題與殺子進程是詹金斯殺死所有的人......

我應該如何啓動節點過程,使詹金斯能正常殺死它後的版本是完了嗎? 我是從錯誤的角度來處理這個問題,需要從不同的方向來看待它?

謝謝。

回答

0

我發現了兩個方法來解決這個問題,第一是添加殺死所有node.exe的目標,不會有一個問題,如果沒有其他節點實例需要在同一臺機器上運行

<target name="stopnode" description="Stops all instances of node"> 
    <exec executable="taskkill"> 
     <arg value="/IM"/> 
     <arg value="node.exe"/> 
    </exec> 
</target> 

第二種方法是添加一個定時器,該定時器在服務器被訪問時被重置,並在服務器暫時未被訪問時關閉服務器。

global.timer = { 
    count: 5, 
    reset: function() { 
     this.count = 5; 
    } 
}; 

function countdown() { 
    global.timer.count = global.timer.count - 1; 
    //console.log(global.timer.count); 
    if (global.timer.count <= 0) { 
     clearInterval(cd); 
     process.exit(0); 
    } 
} 

var cd = setInterval(function() { countdown() }, 1000); 

只是爲了樂趣的jsfiddle:http://jsfiddle.net/jeJkm/