2013-01-13 4 views
5

은 내가 SSH를 통해이 같이 운영하는 nodejs 응용 프로그램이 있습니다.

분명히, 나는 SSH 세션을 항상 열려 있지 않습니다.

제가 발견 한 바에 따르면 가끔 내 응용 프로그램이 어떤 페이지도 서버에 연결되지 않는 상태가 될 수 있습니다. 이것은 응용 프로그램 자체 또는 단절된 SSH 세션과 관련이있을 수 있습니다.

어느 쪽이든, 단순히 실행, SSH에 로그인 :

$ tmux attach 

그리고 창에 포커스를주는 것은 모든 것을 다시 반응한다.


나는 node.js의 모든 점이 모든 것이 비 차단이라는 것을 알았다.

+0

음, 어떤 OS입니까? – Brad

+0

@Brad : Ubuntu 12.04.1 – Eric

+0

@Eric 설명에서 모두 잘 작동하므로 코드에 문제가 있습니다. – loganfsmyth

답변

2

창이 복사 모드 일 때 tmux은 tty에서 읽지 않습니다. tty에서 "in"을 실행하는 일부 프로그램이 계속 출력을 생성하면 OS의 tty 버퍼가 채워져 쓰기 프로세스/스레드가 차단됩니다. Node.js의 내부 구조를 알지 못하지만 stdout/stderr에 블록 쓰기를 기대하지 않을 수 있습니다. console functions에는 콜백이없는 것처럼 보이므로 실제로 차단할 수 있습니다.

따라서 SSH 연결이 끊어졌을 때 Node.js가 실행중인 창을 복사 모드로 유지하면 Node.js가 차단 될 수 있습니다. 당신이 비 블로킹 로깅을 보장해야하는 경우

, 다음 리디렉션 할 (또는 티) 당신의 표준 출력과 표준 에러를 파일로하고, 이전 로그를 볼 less 같은 것을 사용할 수 있습니다 (들 복사 모드 TMUX '을 피 차단이 발생할 수 있기 때문에). 이 같은

아마 뭔가 : 당신이 로깅 라이브러리를 사용하는 경우

# Redirect stdout/stderr to a file, running Node.js in the background. 
# Start a "less +F" on the log so that we immediately have a "tail" running. 
node app.js >>app.log 2>&1 & less +F app.log 

또는

# This pane will act as a 'tail -f', but do not use copy-mode here. 
# Instead, run e.g. 'less app.log' in another pane to review prior logs. 
node app.js 2>&1 | tee -a app.log 

또는, 당신이 자동으로 파일을 작성하는 데 사용할 수있는 무언가가있을 수 있습니다.