2013-10-09 3 views
3

현재 NodeJs 웹 서비스를 사용하여 필요에 따라 일부 casper.js 스크립트를 실행하고 있습니다. casper.js는 stdout을 노드로 다시 사용하고 노드는 자식 프로세스로 casper를 실행하기 때문에 다른 노드 서비스와 마찬가지로 nssm을 사용하는 Windows 서비스로 노드를 실행할 수 없으므로 서버의 시작시 실행됩니다. 예정된 작업.NodeJs에서 독립적 인 프로세스 시작

이 코드는 제작할 필요가 있으며 이제는 충돌에보다 탄력적으로 대처해야합니다. 즉, 실패하면 서비스를 다시 시작해야합니다. 그것은 창을

  • 어떻게 든 데몬으로 실행중인 경우

    내 옵션까지 내가 그들을 볼 수

    1. 실행 리눅스 상자와 노드 서비스는 다음 표준 출력 작동합니다 ....입니다 서비스는 내가 옵션을 possi 경우를 피하기 위해 같은 것, 그것은 지금까지

    를 실패 할 경우를 서비스를 모니터링하고 다시 시작할 수있는 별도의 노드 서버 (nssm에서 실행)을 작성

  • STDOUT "볼"수 추가 호스팅 호스트로 인해 발생합니다. 옵션 2로 도움이되는 항목을 찾을 수 없습니다. Windows 서비스가 그런 식으로 작동하지 않는 것처럼 보입니다.

    그래서 오늘은 하트 비트에 응답하지 않으면 충돌 서비스를 다시 시작할 수있는 모니터 서비스를 만들려고했습니다. 문제는 다른 인스턴스 노드 내에서 완전히 독립적 인 노드 서버를 시작하는 방법을 알아낼 수 없다는 것입니다. 내가 자식 프로세스를 사용한다면 그것은 여전히 ​​서비스의 자식 프로세스이며 표준 출력은 작동합니다.

    그래서 노드에 독립적 인 프로세스를 만들 수 있습니까? 이 문제를 해결하기위한 다른 제안이 있습니까?

  • 답변

    3

    하위 프로세스는 여전히 독립적 인 프로세스이지만 기본적으로 stdin 스트림은 여전히 ​​부모 프로세스에 연결되어 있으므로 부모 프로세스가 종료 될 때 하위 프로세스도 종료됩니다. 이러한 일이 발생하지 않도록하려면 자식 프로세스를 분리 된 상태로 실행하십시오. 여기에 문서의 예는 다음과 같습니다

    var fs = require('fs'); 
    var spawn = require('child_process').spawn; 
    var out = fs.openSync('./out.log', 'a'); 
    var err = fs.openSync('./out.log', 'a'); 
    
    var child = spawn('cmd', [], { 
        detached: true, 
        stdio: [ 'ignore', out, err ] 
    }); 
    
    child.unref(); 
    

    child.unref() 방법은 이벤트 루프에서 아이에 대한 참조를 제거합니다. 그런 식으로, 부모는 자식이 빠져 나가기를 기다리지 않을 것입니다. 또한 detached 옵션을 사용하는 경우에도 자녀의 stdin 스트림을 부모와 연결을 끊거나 연결 상태를 유지해야합니다.